Python-schreiben zur Datei, die über stdout und fileinput
Ich habe folgenden code, der ändert jede Zeile der Datei test.tex durch einen regulären Ausdruck substitution.
import re
import fileinput
regex=re.compile(r'^([^&]*)(&)([^&]*)(&)([^&]*)')
for line in fileinput.input('test.tex',inplace=1):
print regex.sub(r'\3\2\1\4\5',line),
Das einzige problem ist, dass ich nur wollen, dass die substitution anwenden, um bestimmte Zeilen in der Datei, und es gibt keine Möglichkeit zu definieren, ein Muster zu wählen, die richtigen Zeilen. Also, ich möchte Anzeige jeder Zeile und fordert den Benutzer auf der Kommandozeile, mit der Frage, ob die substitution auf die aktuelle Zeile. Wenn der Benutzer "y" die substitution vorgenommen wird. Wenn der Benutzer gibt einfach nichts, die substitution ist nicht gemacht.
Das problem ist natürlich, dass durch die Verwendung der code inplace=1
ich habe effektiv umgeleiteten stdout auf die geöffnete Datei. Es gibt also keine Möglichkeit mit der Ausgabe (z.B. mit der Frage, ob die substitution) für die Befehlszeile, die nicht zugestellt bekommen, die Datei.
Irgendwelche Ideen?
- Verwenden Sie stderr.....
fileinput
ist nicht das richtige tool für diesen job. Verwenden Sie einfach ein standard-Lesen-ändern-schreiben-Muster- können Sie mir ein Beispiel, das zu tun, was die Erwähnung? Sorry, ich bin ganz neu bei Python.
- Ideen? Ja. Verwenden Sie nicht fileinput inplace. Ein reguläres open() auf die Datei, get user input, schreiben eine temp-Datei, wenn Sie fertig sind, verschieben Sie die temp-Datei um die Originaldatei zu ersetzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Datei-input-Modul ist eigentlich für den Umgang mit mehr als einer input-Datei.
Sie können in der normalen open () - Funktion statt.
Etwas wie dies funktionieren sollte.
Durch das Lesen der Datei, dann zurücksetzen der Zeiger mit seek () können wir überschreiben die Datei Anhängen am Ende, und so Bearbeiten Sie die Datei in-place -
http://docs.python.org/tutorial/inputoutput.html
Basiert auf der Hilfe-alle zur Verfügung gestellt, hier ist was ich landete mit:
Vielen Dank!