Seite 1 von 1

python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 21:39
von evd
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

Re: python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 22:00
von /me
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.

Re: python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 22:04
von Ene Uran

Code: Alles auswählen

liste=open("H:\\Amazon\\","w")
gibt dier keine Liste sondern einen Haendler zum Schreiben ("w" --> write) einer Datei.

Re: python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 22:07
von evd
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 ...

Re: python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 22:13
von 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.

Re: python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 22:24
von evd
@"/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 :)

Re: python str ersetzen

Verfasst: Sonntag 20. Juli 2014, 23:06
von 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.