2013-11-23 8 views
13

Ich habe ein Python-Skript, das eine Textdatei verwendet und die Daten aus der Datei manipuliert und in eine andere Datei ausgibt. Grundsätzlich möchte ich, dass es für jede Textdateieingabe funktioniert. Jetzt lese ich aus der Datei und drucke dann die Ausgabe auf den Bildschirm. Ich möchte die Ausgabe in einer Datei.Wie nehme ich Eingabedatei vom Terminal für Python-Skript?

So können Benutzer den folgenden und Test für jeden Dateityp:

cat input_file.txt | python script.py > output_file.txt. 

Wie kann ich dies in meinem Skript implementieren? Danke.

cat ist Befehl in Linux. Ich weiß nicht, wie es funktioniert.

+1

Verwendung von 'cat foo | bar' ist nie notwendig; Sie können stattdessen immer nur 'bar abarnert

Antwort

26

Der beste Weg, dies wahrscheinlich zu tun ist, zu nennen die Eingabe- und Ausgabedateien als Argumente für das Python-Skript:

Dann können Sie alle Ihre Daten einlesen, tun Sie Ihre Manipulationen, und die Ergebnisse aufschreiben:

with open(inFile,'r') as i: 
    lines = i.readlines() 

processedLines = manipulateData(lines) 

with open(outFile,'w') as o: 
    for line in processedLines: 
     o.write(line) 

Sie dieses Programm Wenn Sie unbedingt python script.py input_file.txt output_file.txt

, indem Sie die Daten in Python muss Rohr nennen kann (was wirklich nicht zu empfehlen ist), verwenden sys.stdin.readlines()

+0

Warum wird eine Rohrleitung nicht empfohlen? (Oder willst du sagen "cat foo | python bar.py" und "python bar.py

3
cat input_file.txt | python script.py > output_file.txt. 

Sie können einen großen String übergeben, der die Daten innerhalb input_file.txt alle statt einer tatsächlichen Datei hat so um Ihre Python-Skript zu implementieren, nehmen Sie nur, dass es als String-Argument und spaltete die Saiten durch neue Linie Zeichen, zum Beispiel Sie „\ n“ als Trennzeichen zu spalten, dass großen Zeichenfolge und zu schreiben, um eine Ausgabedatei verwenden können, tun Sie es einfach in gewohnter Weise

dh open file, write to the file und close file

+1

'in Windows können Sie "\ n" als Trennzeichen verwenden' ist ziemlich irreführend. Auf jeder modernen Plattform _except_ Windows können Sie '\ n' als Trennzeichen verwenden. Unter Windows müssen Sie '\ r \ n' verwenden, es sei denn, Sie verwenden den Textmodus mit universellen Zeilenumbrüchen. In diesem Fall können Sie mit Python Windows wie eine andere Plattform behandeln. – abarnert

+0

@abarnert du hast mich! aktualisiert, thx – JoeC

0

Senden Ausgang zu einer Datei ist sehr ähnlich wie die Eingabe von einer Datei.

Sie öffnen eine Datei zum Schreiben auf die gleiche Weise wie beim Lesen, außer mit einem 'w' Modus anstelle eines 'r' Modus.

Sie schreiben in eine Datei, indem Sie write auf dieselbe Weise aufrufen, indem Sie read oder readline aufrufen.

Dies ist alles im Abschnitt Reading and Writing Files des Tutorials erläutert.

Also, wenn Ihr vorhandenen Code sieht wie folgt aus:

with open('input.txt', 'r') as f: 
    while True: 
     line = f.readline() 
     if not line: 
      break 
     print(line) 

Sie müssen nur dies tun:

with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout: 
    while True: 
     line = fin.readline() 
     if not line: 
      break 
     fout.write(line) 

Wenn Sie schauen, um den Benutzer zu ermöglichen, die passieren Dateinamen in der Befehlszeile verwenden Sie sys.argv, um die Dateinamen abzurufen, oder verwenden Sie argparse für kompliziertereres Befehlszeilenargumentparsing.

Zum Beispiel können Sie die erste Zeile, um diese Änderung:

import sys 
with open(sys.argv[1], 'r') as fin, open(sys.argv[2], 'w') as fout: 

Nun können Sie das Programm wie folgt ausführen:

python script.py input_file.txt outputfile.txt 
+0

Cool, danke ich habe es funktioniert. –

1

Diese Methode (Frage) beschreibt das Lesen von Daten von STDIN:

cat input_file.txt | python script.py

Lösung: script.py:

import sys 
for line in sys.stdin: 
    print line 

Das Verfahren in obigen Lösungen beschreibt Argument Parameter mit Ihrem Python Gespräch:

python script.py input_file.txt

Lösung: script.py:

import sys 
with open(sys.argv[1], 'r') as file: 
    for line in file: 
     print line 

Hoffe, das hilft!

Verwandte Themen