Passer des arguments avec des jokers à un script Python
-
03-07-2019 - |
Question
Je veux faire quelque chose comme ça:
c:\data\> python myscript.py *.csv
et transmettez tous les fichiers .csv du répertoire à mon script python (tel que sys.argv
contient [" fichier1.csv "," fichier2.csv "]
, etc.)
Mais sys.argv
ne reçoit que [" *. csv "]
indiquant que le caractère générique n'a pas été étendu, donc cela ne fonctionne pas.
Je pense qu'il existe un moyen simple de le faire, mais je ne le trouve pas sur Google. Des idées?
La solution
Vous pouvez utiliser le module glob pour ne pas dépendre du comportement d'un shell particulier (vous dépendez toujours du shell ne développant pas les arguments, mais vous pouvez au moins que cela se produise sous Unix en échapper aux caractères génériques :-)).
from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument
Autres conseils
Sous Unix, le shell développe les caractères génériques, de sorte que les programmes obtiennent la liste étendue des noms de fichiers. Windows ne le fait pas: le shell transmet les caractères génériques directement au programme, qui doit les développer lui-même.
Vinko a raison: le module glob fait le travail:
import glob, sys
for arg in glob.glob(sys.argv[1]):
print "Arg:", arg