在Python 3中将打印输出定向到.txt文件

时间:2016-04-12 11:10:46

标签: python python-3.x

有没有办法将所有打印输出保存到python中的txt文件?假设我的代码中有这两行,我想将打印输出保存到名为output.txt的文件中。

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

我希望output.txt文件包含

Hello stackoverflow!
I have a question.

7 个答案:

答案 0 :(得分:56)

print一个file关键字参数,其中参数的值是文件流。我们可以使用open函数创建文件流:

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

来自Python documentation about print

  

file参数必须是具有write(string)方法的对象;如果不存在或None,则会使用sys.stdout

the documentation for open

  

打开file并返回相应的文件对象。如果无法打开文件,则会引发OSError

"a"作为open的第二个参数意味着“追加” - 换句话说,文件的现有内容不会被覆盖。如果您希望覆盖该文件,请使用"w"

多次使用open打开文件并不是理想的性能。理想情况下,您应该打开一次并命名,然后将该变量传递给print的{​​{1}}选项。您必须记得以后关闭该文件!

file

还有一个语法快捷方式,即f = open("output.txt", "a") print("Hello stackoverflow!", file=f) print("I have a question.", file=f) f.close() 块。这将在块结束处为您关闭文件:

with

答案 1 :(得分:12)

您可以将stdout重定向到文件“output.txt”:

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

答案 2 :(得分:5)

使用日志记录模块

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

获取记录器:

logger = init_logging()

开始记录/输出(ing):

logger.debug('Hi! :)')

答案 3 :(得分:0)

一个人可以直接将函数的返回输出存储在文件中。

    print(output statement, file=open("filename", "a"))

答案 4 :(得分:0)

另一个变化可能是...请确保稍后关闭文件

import sys
file = open('output.txt', 'a')
sys.stdout = file

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

file.close()

答案 5 :(得分:0)

另一种无需完全更新Python代码的方法是通过控制台重定向

基本上,像往常一样使用Python脚本print(),然后从命令行调用脚本并使用命令行重定向。像这样:

$ python ./myscript.py > output.txt

您的output.txt文件现在将包含Python脚本的所有输出。

答案 6 :(得分:0)

假设我的输入文件是“ input.txt”,输出文件是“ output.txt”:

让我们考虑一下输入文件的详细信息: 5 1 2 3 4 5

================================================ ===============

import sys

sys.stdin = open("input", "r")
sys.stdout = open("output", "w")

print("Reading from input File : ")
n = int(input())
print("Value of n is :", n)

arr = list(map(int, input().split()))
print(arr)

================================================ ============

所以这将从输入文件中读取,输出将显示在输出文件中。

有关更多详细信息,请参见:[https://www.geeksforgeeks.org/inputoutput-external-file-cc-java-python-competitive-programming/][1]