如何将print输出重定向到TXT文件

67 投票
8 回答
183716 浏览
提问于 2025-04-16 06:38

我在谷歌、Stack Overflow和我的Python用户手册上搜索过,但没有找到一个简单可行的答案。

我在一台Windows 7 x64的电脑上创建了一个文件c:\goat.txt,现在想把“test”这个字写入文件里。我根据Stack Overflow上提供的例子尝试了以下方法:

目前我不想使用日志模块,因为我不太明白如何根据二进制条件创建一个简单的日志。打印输出很简单,但如何把输出重定向到文件里就不太明显了。

如果能给我一个简单明了的例子,我可以直接在我的解释器里输入,那就太好了。

另外,任何推荐的学习网站也很受欢迎(不要推荐pydocs)。

import sys
print('test', file=open('C:\\goat.txt', 'w')) #fails
print(arg, file=open('fname', 'w')) # above based upon this
print>>destination, arg

print>> C:\\goat.txt, "test" # Fails based upon the above

8 个回答

20

有一种稍微“黑科技”的方法(和上面提到的答案不同,但都是有效的),就是通过控制台把输出直接导入一个文件。

假设你有一个叫做 main.py 的文件。

if True:
    print "hello world"
else:
    print "goodbye world"

你可以这样做:

python main.py >> text.log

这样,所有的输出就会被保存到 text.log 这个文件里。

这个方法很方便,特别是当你已经写了很多打印语句,而不想一个个去改成打印到特定文件时。只需要在最上面设置一下,就能把所有的打印输出都导入到一个文件里(唯一的缺点是,你只能把输出导入到一个地方)。

54

要把所有的输出都重定向,你可以这样做:

import sys
with open('c:\\goat.txt', 'w') as f:
    sys.stdout = f
    print "test"
128

如果你使用的是Python 2.5或更早的版本,先打开文件,然后在重定向时使用这个文件对象:

log = open("c:\\goat.txt", "w")
print >>log, "test"

如果你使用的是Python 2.6或2.7版本,可以把print当作一个函数来用:

from __future__ import print_function
log = open("c:\\goat.txt", "w")
print("test", file = log)
log.close()

如果你使用的是Python 3.0或更新的版本,就可以省略未来导入的那一行。

如果你想全局重定向你的print语句,可以设置sys.stdout:

import sys
sys.stdout = open("c:\\goat.txt", "w")
print ("test sys.stdout")

撰写回答