) {...}?'/> ) {...}?'/> ) {...}?'/> Equivalente in Python di Perl's while (<>) {...}? | webgamecafe.com

Domanda Equivalente in Python di Perl's while (<>) {...}?


Scrivo un sacco di piccoli script che elaborano i file riga per riga. In Perl, io uso

while (<>) {
    do stuff;
}

Questo è utile perché non importa da dove proviene 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 idioma Python che gestisce facilmente l'input di file / stdin?


21
2018-04-30 14:23


origine


risposte:


Il modulo fileinput nella libreria standard è proprio quello che vuoi:

import fileinput

for line in fileinput.input(): ...

49
2018-04-30 14:26



import fileinput
for line in fileinput.input():
    process(line)

Questo scorre sulle linee di tutti i file elencati in sys.argv [1:], per impostazione predefinita su sys.stdin se l'elenco è vuoto.


15
2018-04-30 14:27



fileinput il default è lo stdin, quindi lo renderebbe leggermente più conciso.

Se fai un sacco di cose da linea di comando, però, questo piping hack è molto pulito


7
2018-04-30 14:31