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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top