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.
InformationsquelleAutor synaptik | 2012-05-30
Schreibe einen Kommentar