python str ersetzen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
evd
User
Beiträge: 34
Registriert: Donnerstag 20. Juni 2013, 19:19

Hallo zusammen, ich habe gleich 2 fragen an der Hand...

1. ich will eine Textdatei verändern... ich lese sie aus

Code: Alles auswählen

self.liste=open("/home/evd/Schreibtisch/python/Amazon/Misch","w")
nun will ich gewisse Textstellen verändern...

Code: Alles auswählen

kommt_weg="ASP"
kommt_rein="hallo"
anfang_ersetzen=(liste.index(kommt_weg))
ende_ersetzen=len(kommt_weg)+anfang_ersetzen
liste[anfang_ersetzen:ende_ersetzen]=kommt_rein
ich bekomme aber immer ein Error

"TypeError: 'str' object does not support item assignment"

wie kann ich den Text ersetzen, und warum geht es so nicht?

2. ich will mit einem und dem selben Dokument unter windows (schule) und linux (zuhause) arbeiten, daher habe ich mir gedacht

Code: Alles auswählen

try:
   liste=open("H:\\Amazon\\","w")
except:
   liste=open("/home/evd/Schreibtisch/python/Amazon/","w")
ich hoffte das er es so auslesen kann, egal wo, doch wenn ich unter linux bin benutzt er immer noch den Windows-Pfad, und gibt mir ein leeres Feld aus
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

evd hat geschrieben:wie kann ich den Text ersetzen, und warum geht es so nicht?
Strings sind unveränderlich. Du kannst nur einen neuen String auf Basis des alten Strings erstellen.

Code: Alles auswählen

>>> value = 'abcdefghijklm'
>>> value.replace('fgh', 'zyxwv')
'abcdezyxwvijklm'
>>> print value
abcdefghijklm
Wie du siehst hat sich value nicht geändert. Du kannst natürlich value an den Wert binden, der von der replace-Methode zurückgegeben wird.

Code: Alles auswählen

>>> value = value.replace('fgh', 'zyxwv')
>>> print value
abcdezyxwvijklm
Das ist jetzt ein neuer String, aber er enthält den gewünschten Inhalt.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Code: Alles auswählen

liste=open("H:\\Amazon\\","w")
gibt dier keine Liste sondern einen Haendler zum Schreiben ("w" --> write) einer Datei.
Atomkraftwerkaktienbesitzer
evd
User
Beiträge: 34
Registriert: Donnerstag 20. Juni 2013, 19:19

Ene Uran hat geschrieben:gibt dier keine Liste sondern einen haendler zum schreiben ("w" --> write) einer Datei.
ja?... ja... ok ... heandler ... gespeichert ... aber die Primär frage ist, warum gibt es mit keinen error, wenn ich einen windows Pfad unter linux benutze ...
BlackJack

@evd: Warum sollte es einen Fehler geben? Ist doch ein gültiger Dateiname unter Linux. Der Laufwerksbuchstabe hat unter Linux keine besondere Bedeutung. Ist halt ein ganz normaler Bestandteil des Dateinamens.
evd
User
Beiträge: 34
Registriert: Donnerstag 20. Juni 2013, 19:19

@"/me"

ja, das habe ich mir auch schon überlegt, nur habe ich das Problem das die io.TextIOWrapper kein replace kennt ...


BlackJack hat geschrieben:@evd: Warum sollte es einen Fehler geben? Ist doch ein gültiger Dateiname unter Linux. Der Laufwerksbuchstabe hat unter Linux keine besondere Bedeutung. Ist halt ein ganz normaler Bestandteil des Dateinamens.
nur das es dieses Laufwerk nicht gibt... gibt er dann kein Error, wie "wurde nicht gefunden" aus, oder so?
ok, dann muss ich halt immer das andere auskommentieren :)
BlackJack

@evd: `io.TextIOWrapper` kennt keine `replace()`-Methode, allerdings würde auch bei diesem Typ auch eine Zuweisung an einen „slice” nicht funktionieren. Du musst das alles schon mit den richtigen Datentypen machen. Also die Daten als Zeichenkette einlesen und auf *der* dann `replace()` aufrufen und das Ergebnis dieses Aufrufs dann weiterverarbeiten. Zum Beispiel wieder in eine Datei schreiben.

Linux kennt keine Laufwerksbuchstaben. Da ist das H: einfach Bestandteil eines normalen, relativen Dateinamens. Warum sollte das einen Fehler geben? Und „wurde nicht gefunden” kann es da nicht geben weil die Datei ja *angelegt* wird bei 'w' wenn es sie vorher nicht gab.

Wenn Du den gleichen Code auf verschiedenen Systemen verwenden willst, dann solltest Du nicht Quelltext aus- und einkommentieren, sondern die „variablen Konstanten” durch Variablen ersetzen. Zum Beispiel als Argumente beim Aufruf des Programms übergeben, oder in einer Konfigurationsdatei ablegen.
Antworten