Pergunta

Eu quero fazer algo parecido com isto:

c:\data\> python myscript.py *.csv

e passar todos os arquivos .csv no diretório para o meu script python (tal que sys.argv contém ["file1.csv", "file2.csv"], etc.)

Mas sys.argv apenas recebe ["*.csv"] indicando que o curinga não foi expandido, de modo que este não funciona.

Eu sinto que há uma maneira simples de fazer isso, mas não pode encontrá-lo no Google. Alguma idéia?

Foi útil?

Solução

Você pode usar o módulo glob, dessa forma você não vai depender do comportamento de um shell particular (bem, você ainda dependem do shell não expandir os argumentos, mas pelo menos você pode obter isso aconteça em Unix por escapando os wildcards :-)).

from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument

Outras dicas

Em Unix, o shell expande wildcards, para que os programas obter a lista expandida de nomes de arquivos. O Windows não fazer isso:. o shell passa os wildcards diretamente para o programa, que tem de expandi-los em si

Vinko está certo: o módulo glob faz o trabalho:

import glob, sys

for arg in glob.glob(sys.argv[1]):
    print "Arg:", arg
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top