Passando argumentos com curingas para um script Python
-
03-07-2019 - |
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?
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