2016-04-12 6 views
5

Gibt es eine Möglichkeit, die gesamte Druckausgabe in einer TXT-Datei in Python zu speichern? Sagen wir, ich habe die zwei Zeilen in meinem Code und ich möchte die Druckausgabe in eine Datei mit dem Namen output.txt speichern.Druckausgabe in eine .txt-Datei in Python 3 steuern

print ("Hello stackoverflow!") 
print ("I have a question.") 

Ich möchte die output.txt-Datei

Hello stackoverflow! 
I have a question. 

Antwort

13

print ein file Stichwort Argument Geben enthalten, wobei der Wert des Arguments ein Datei-Stream ist. Wir können eine Datei-Stream mit der open Funktion erstellen:

print("Hello stackoverflow!", file=open("output.txt", "a")) 
print("I have a question.", file=open("output.txt", "a")) 

Vom Python documentation about print:

Das file Argument ein Objekt mit einem write(string) Verfahren sein muß; Wenn es nicht vorhanden ist oder None, wird sys.stdout verwendet.

Und the documentation for open:

öffnet file und ein entsprechendes Dateiobjekt zurück. Wenn die Datei nicht geöffnet werden kann, wird OSError ausgelöst.

Die "a" als das zweite Argument von open bedeutet „anhängen“ - in anderen Worten, nicht die vorhandenen Inhalt der Datei überschrieben. Wenn Sie die Datei stattdessen überschreiben möchten, verwenden Sie "w".

+0

danke für diese antwort. Sobald die erste Zeile des Codes (erster Druck) ausgeführt ist, wird die entsprechende Datei geschlossen, bevor der zweite Druckbefehl ausgeführt wird. Recht? Gibt es eine Möglichkeit, viele Dinge in derselben Datei zu drucken, aber sicherzustellen, dass die Datei geschlossen wird, bevor die zweite Runde ausgeführt wird? Mit anderen Worten, ich möchte einige Dinge in den gleichen Dateien für jede Runde um die Schleife mit dem Schließen der Datei dazwischen drucken. Danke, – Allan

+1

@Allan, du solltest eine 'with'-Anweisung verwenden, um die Datei zu öffnen. Dies erzeugt ein "Datei" -Objekt und hält es während eines ganzen Blocks offen und schließt es dann am Ende. Sehen Sie sich das erste Beispiel [in diesem Artikel] an (http://preshing.com/20110920/the-python-with-statement-by-example/). Lass es mich wissen, wenn du weitere Fragen hast! –

5

Sie können stdout in eine Datei umleiten "output.txt"


    import sys 
    sys.stdout = open('output.txt','wt') 
    print ("Hello stackoverflow!") 
    print ("I have a question.") 
+3

Gibt es eine Möglichkeit, dies zu tun und zeigen Sie auch den Text in der Konsole? Also gleichzeitig auf Konsole und in eine Datei drucken? Ich möchte in der Lage sein, alle meine print-Anweisungen zu sehen, so dass ich weiß, wo das Programm ausgeführt wird, und die Anweisungen zur Fehlerbehebung, aber auch alle diese dump in eine Textdatei. – Korzak

0

Verwenden Sie das Protokollierungsmodul

def init_logging(): 
    rootLogger = logging.getLogger('my_logger') 

    LOG_DIR = os.getcwd() + '/' + 'logs' 
    if not os.path.exists(LOG_DIR): 
     os.makedirs(LOG_DIR) 
    fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2")) 
    rootLogger.addHandler(fileHandler) 

    rootLogger.setLevel(logging.DEBUG) 

    consoleHandler = logging.StreamHandler() 
    rootLogger.addHandler(consoleHandler) 

    return rootLogger 

den Logger-Adresse:

logger = init_logging() 

und starten Sie die Protokollierung/Ausgabe (ing):

logger.debug('Hi! :)')