Python equivalente enquanto o Perl (<>) {...}?
Pergunta
Eu escrevo um monte de pequenos scripts que processar arquivos em uma base linha por linha. Em Perl, eu uso
while (<>) {
do stuff;
}
Isso é útil porque não importa onde a entrada vem de (um arquivo ou stdin).
Em Python Eu uso este
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
o que não parece muito elegante. Existe uma linguagem Python que lida facilmente com arquivo / entrada stdin?
Solução
O módulo FileInput na biblioteca padrão é apenas o que você quer:
import fileinput
for line in fileinput.input(): ...
Outras dicas
import fileinput
for line in fileinput.input():
process(line)
Este itera sobre as linhas de todos os arquivos listados no sys.argv [1:]., Inadimplentes para sys.stdin se a lista estiver vazia
FileInput padrão para stdin, então tornaria um pouco mais conciso.
Se você faz um monte de coisas de linha de comando, no entanto, este tubulação corte é muito arrumado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow