Python equivalente di Perl mentre while (< >) {…}?
Domanda
Scrivo molti piccoli script che elaborano i file riga per riga. In Perl, uso
while (<>) {
do stuff;
}
Questo è utile perché non importa da dove provenga l'input (un file o stdin).
In Python lo uso
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
che non sembra molto elegante. Esiste un linguaggio Python che gestisce facilmente l'input di file / stdin?
Soluzione
Il modulo fileinput nella libreria standard è proprio quello che vuoi:
import fileinput
for line in fileinput.input(): ...
Altri suggerimenti
import fileinput
for line in fileinput.input():
process(line)
Questo scorre tra le righe di tutti i file elencati in sys.argv [1:], per impostazione predefinita su sys.stdin se l'elenco è vuoto.
fileinput viene impostato automaticamente su stdin, quindi lo renderebbe leggermente più conciso.
Se fai molte cose da riga di comando, tuttavia, questo hacking delle tubazioni è molto pulito.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow