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?

È stato utile?

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
scroll top