web-dev-qa-db-ger.com

PYTHON holt Dateien von der Kommandozeile

Wie erhalten Sie einen Dateinamen von der Befehlszeile, wenn Sie einen Python-Code ausführen? Wie wenn Ihr Code eine Datei öffnet und die Zeile liest, die Datei jedoch bei jedem Ausführen unterschiedlich ist, wie Sie sagen:

python code.py input.txt

also analysiert der Code "input.txt"? Was müssten Sie im eigentlichen Python-Code tun? Ich weiß, das ist eine ziemlich vage Frage, aber ich weiß nicht, wie ich es besser erklären kann.

35
Naveen C.

Eine gute Option ist das fileinput-Modul, das einen oder alle Dateinamen von der Befehlszeile abholt und den Inhalt dann an Ihr Skript übergibt, als wäre es eine große Datei.

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

Weitere Informationen hier .

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

Dadurch wird das letzte Argument in der Befehlszeile angezeigt. Wenn keine Argumente übergeben werden, ist dies der Skriptname selbst, da sys.argv[0] der Name des laufenden Programms ist.

26
agf

Die Verwendung von argparse ist sehr intuitiv:

import argparse
parser = argparse.ArgumentParser()                                               

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

Nun befindet sich der Name der Datei in:

args.file

Sie müssen das Programm nur etwas anders ausführen:

python code.py -f input.txt
14
Degraw

Befehlszeilenparameter stehen als Liste über die Liste sys module argv zur Verfügung. Das erste Element in der Liste ist der Name des Programms (sys.argv[0]). Die restlichen Elemente sind die Befehlszeilenparameter.

Siehe auch die Module getopt , optparse und argparse für komplexere Befehlszeilenanalyse.

9
Mark Tolonen

Zusätzlich zu den bereits vorhandenen Antworten gibt es eine weitere Alternative, die sich auf die Verwendung von Command Line Interface Creation Kit (Click) stützt. Die letzte stabile Version dieser Version ist Version 6 . Die offizielle Dokumentation enthält Beispiele, wie Dateien behandelt und als Befehlszeilenargumente übergeben werden.

0