Ich habe den folgenden Code, der jede Zeile der Datei test.tex durch eine regelmäßige Ausdrucksersetzung ändert.Python Schreiben in Datei mit stdout und fileinput
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 die Substitution will auf bestimmte Zeilen in der Datei anzuwenden, und es gibt keine Möglichkeit, ein Muster zu definieren, die richtigen Linien zu wählen. Daher möchte ich jede Zeile anzeigen und den Benutzer in der Befehlszeile auffordern zu fragen, ob die Ersetzung an der aktuellen Zeile vorgenommen werden soll. Wenn der Benutzer "y" eingibt, wird die Ersetzung vorgenommen. Wenn der Benutzer einfach nichts eingibt, wird die Ersetzung nicht vorgenommen.
Das Problem ist natürlich, dass durch die Verwendung des Codes inplace=1
ich stdout effektiv auf die geöffnete Datei umgeleitet habe. Es gibt also keine Möglichkeit, die Ausgabe anzuzeigen (z. B. zu fragen, ob die Ersetzung durchgeführt werden soll), die nicht an die Datei gesendet wird.
Irgendwelche Ideen?
Verwenden Sie stderr ..... –
'Fileinput' ist nicht das richtige Werkzeug für diesen Job. Verwenden Sie einfach ein Standard-Read-Modify-Write-Muster –
@EliBendersky können Sie mich auf ein Beispiel zu tun, was die Erwähnung? Entschuldigung, ich bin sehr neu bei Python. – synaptik