web-dev-qa-db-fra.com

Diriger les impressions vers un fichier .txt dans Python 3

Existe-t-il un moyen de sauvegarder toutes les sorties imprimées dans un fichier txt en python? Disons que j'ai ces deux lignes dans mon code et que je veux enregistrer la sortie d'impression dans un fichier nommé output.txt.

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

Je veux que le fichier output.txt contienne

Hello stackoverflow!
I have a question.
20
Clone

Donnez à print un argument de mot clé file, dont la valeur est un flux de fichier. Nous pouvons créer un flux de fichiers en utilisant la fonction open:

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

Dans la documentation Python sur print :

L'argument file doit être un objet avec une méthode write(string); s'il n'est pas présent ou None, sys.stdout sera utilisé.

Et la documentation pour open :

Ouvrez file et retournez un objet de fichier correspondant. Si le fichier ne peut pas être ouvert, une OSError est déclenchée.

Le "a" en tant que second argument de open signifie "ajouter" - autrement dit, le contenu existant du fichier ne sera pas écrasé. Si vous souhaitez plutôt écraser le fichier, utilisez "w".

44
Aaron Christiansen

Vous pouvez rediriger stdout dans un fichier "output.txt":

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

Utilisez le module de journalisation

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

Obtenez le logger:

logger = init_logging()

Et commencez la journalisation/sortie (ing):

logger.debug('Hi! :)')
3
gies0r