2016-04-12 7 views
5

C'è un modo per salvare tutta l'output di stampa in un file txt in python? Diciamo che ho queste due righe nel mio codice e voglio salvare l'output di stampa in un file chiamato output.txt.Come indirizzare l'output di stampa in un file .txt in Python 3

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

voglio il file output.txt per contenere

Hello stackoverflow! 
I have a question. 

risposta

13

Dare print un argomento file parola chiave, in cui il valore dell'argomento è un flusso di file. Siamo in grado di creare un flusso di file utilizzando la funzione open:

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

Dal Python documentation about print:

L'argomento file deve essere un oggetto con un metodo write(string); se non è presente o None, verrà utilizzato sys.stdout.

E the documentation for open:

Aprire file e restituire un oggetto file corrispondente. Se il file non può essere aperto, viene sollevato un numero OSError.

Il "a" come secondo argomento di open significa "append" - in altre parole, non saranno sovrascritti i contenuti esistenti del file. Se si desidera che il file venga sovrascritto, utilizzare "w".

+0

grazie per questa risposta. Una volta eseguita la prima riga del codice (prima stampa), il file corrispondente viene chiuso prima dell'esecuzione effettiva del secondo comando di stampa. Destra? C'è un modo per stampare un sacco di cose tutte insieme nello stesso file ma assicurandosi che il file si chiuda prima che venga eseguito il secondo ciclo? In altre parole, mi piacerebbe stampare alcune cose negli stessi file per ogni giro del ciclo con il file di chiusura in mezzo. Grazie, – Allan

+1

@ Allan, dovresti usare un'istruzione 'with' per aprire il file. Questo crea un oggetto 'file' e lo mantiene aperto su un intero blocco, quindi lo chiude alla fine. Guarda il primo esempio [in questo articolo] (http://preshing.com/20110920/the-python-with-statement-by-example/). Fammi sapere se hai altre domande! –

5

È possibile reindirizzare stdout in un file "output.txt"


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

C'è un modo per farlo E mostra anche il testo nella console? Quindi, stampa simultaneamente su console e su un file? Mi piacerebbe essere in grado di vedere tutte le mie dichiarazioni di stampa dei progressi quindi so dove si trova il programma nell'esecuzione e le istruzioni per la risoluzione dei problemi, ma ho anche tutto il dump in un file di testo. – Korzak

0

utilizzare il modulo di registrazione

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 

Prendi il logger:

logger = init_logging() 

e avviare la registrazione/uscita (ing):

logger.debug('Hi! :)') 
Problemi correlati