Python-Äquivalent von Perl while (<>) {...}?
Frage
ich viele kleine Skripte schreiben, die Dateien auf einer Zeile-für-Zeile-Basis zu verarbeiten. In Perl, verwende ich
while (<>) {
do stuff;
}
Das ist praktisch, weil es nicht egal, wo die Eingabe von (einer Datei oder stdin) kommt.
In Python Ich benutze diese
if len(sys.argv) == 2: # there's a command line argument
sys.stdin = file(sys.argv[1])
for line in sys.stdin.readlines():
do stuff
das scheint nicht sehr elegant. Gibt es eine Python Idiom, das leicht Datei / stdin Eingang behandelt?
Lösung
Das Modul fileinput in der Standardbibliothek ist genau das, was Sie wollen:
import fileinput
for line in fileinput.input(): ...
Andere Tipps
import fileinput
for line in fileinput.input():
process(line)
Diese iteriert über die Leitungen aller Dateien in sys.argv aufgeführt [1:]., Säumige sys.stdin wenn die Liste leer ist
fileinput standardmäßig stdin, so wäre es etwas prägnanter machen.
Wenn Sie eine Menge von Befehlszeilen Dinge zu tun, aber diese Rohrleitungen hacken ist sehr ordentlich.