web-dev-qa-db-fra.com

PYTHON récupère les fichiers en ligne de commande

Comment obtenez-vous un nom de fichier à partir de la ligne de commande lorsque vous exécutez un code Python? Par exemple, si votre code ouvre un fichier et lit la ligne, mais que le fichier varie à chaque fois que vous l'exécutez, comment dire:

python code.py input.txt

alors le code analyse "input.txt"? Que devriez-vous faire dans le code Python actuel? Je sais que la question est assez vague, mais je ne sais pas trop comment l'expliquer.

35
Naveen C.

Une bonne option est le module fileinput, qui récupérera tout ou partie des noms de fichiers à partir de la ligne de commande, puis transmettra le contenu à votre script comme s'il s'agissait d'un gros fichier.

import fileinput
for line in fileinput.input():
    process(line)

Plus d'informations ici .

40
kindall
import sys
filename = sys.argv[-1]

Cela aura le dernier argument sur la ligne de commande. Si aucun argument n'est passé, ce sera le nom du script lui-même, puisque sys.argv[0] est le nom du programme en cours d'exécution.

26
agf

Utiliser argparse est assez intuitif:

import argparse
parser = argparse.ArgumentParser()                                               

parser.add_argument("--file", "-f", type=str, required=True)
args = parser.parse_args()

Le nom du fichier se trouve maintenant dans:

args.file

Vous devez juste exécuter le programme un peu différemment:

python code.py -f input.txt
14
Degraw

Les paramètres de ligne de commande sont disponibles sous forme de liste via la liste argv du module sys . Le premier élément de la liste est le nom du programme (sys.argv[0]). Les éléments restants sont les paramètres de ligne de commande.

Voir aussi les modules getopt , optparse et argparse pour une analyse plus complexe en ligne de commande.

9
Mark Tolonen

En plus de ce qui est mentionné dans les réponses existantes, il existe une autre alternative qui repose sur l’utilisation de Kit de création d’une interface de ligne de commande (clic) . Sa dernière version stable au moment où j'ai posté cette réponse est version 6 . La documentation officielle contient des exemples sur la manière de traiter les fichiers et de les transmettre en tant qu'arguments en ligne de commande.

0
Billal Begueradj