如何将python屏幕输出保存到文本文件

如何将python屏幕输出保存到文本文件,python,python-2.7,Python,Python 2.7,我想从dict中查询项目,并将打印输出保存到文本文件中 以下是我所拥有的: import json import exec.fullog as e inp = e.getdata() #inp now is a dict() which has items, keys and values. #Query print('Data collected on:', inp['header']['timestamp'].date()) print('\n CLASS 1 INFO\n') fo

我想从dict中查询项目,并将打印输出保存到文本文件中

以下是我所拥有的:

import json
import exec.fullog as e

inp = e.getdata() #inp now is a dict() which has items, keys and values.

#Query

print('Data collected on:', inp['header']['timestamp'].date())
print('\n CLASS 1 INFO\n')

for item in inp['Demographics']:
    if item['name'] in ['Carly', 'Jane']:
        print(item['name'], 'Height:', item['ht'], 'Age:', item['years'])

for item in inp['Activity']:
    if item['name'] in ['Cycle', 'Run', 'Swim']:
        print(item['name'], 'Athlete:', item['athl_name'], 'Age:', item['years'])

你所要求的并非不可能,但可能不是你真正想要的

不要试图将屏幕输出保存到文件中,只需将输出写入文件而不是屏幕

像这样:

with open('outfile.txt', 'w') as outfile:
    print >>outfile, 'Data collected on:', input['header']['timestamp'].date()
只需将该
>outfile
添加到所有打印语句中,并确保所有内容都缩进到该
下的
语句中


更一般地说,最好使用字符串格式,而不是magic
print
commas,这意味着您可以使用
write
函数。例如:

outfile.write('Data collected on: {}'.format(input['header']['timestamp'].date()))
但是,如果
print
在格式化方面已经在做你想做的事情,你现在可以继续使用它


如果您有其他人编写的Python脚本(或者更糟糕的是,您没有源代码的编译C程序),并且无法进行此更改,该怎么办?然后,答案是将其包装在另一个脚本中,该脚本捕获其输出,并使用模块。同样,您可能不想这样做,但如果您想这样做:

output = subprocess.check_output([sys.executable, './otherscript.py'])
with open('outfile.txt', 'wb') as outfile:
    outfile.write(output)

你可能会想要这个。最简单的解决办法是

首先创建文件

通过打开文件

f = open('<filename>', 'w')

abarnert
的答案非常好,而且很像蟒蛇。另一个完全不同的方法(不是python)是让bash为您完成这项工作:

$ python myscript.py > myoutput.txt
这通常用于将cli程序的所有输出(python、perl、php、java、二进制或其他)放入一个文件中,有关详细信息,请参阅

如果希望输出转到标准输出和文件,可以使用tee:

$ python myscript.py | tee myoutput.txt

有关tee的更多信息,请参阅:

让我总结所有答案并添加更多内容

  • 要从脚本中写入文件,请使用Python提供的用户(这是
    f=open('file.txt','w')
    stuff)

  • 如果不想修改您的程序,可以使用流重定向(on和on)。这是
    python myscript>output.txt
    内容

  • 如果您希望在屏幕和日志文件中同时看到输出,并且如果您在Unix上,并且不想修改程序,则可以使用(,但我从未使用过)

  • 将所需输出发送到屏幕、文件、电子邮件、推特等任何应用程序的更好方式。这里的学习曲线是所有选项中最陡峭的,但从长远来看,它将为自己付费

在脚本中执行此操作的一种快速而肮脏的方法是将屏幕输出指向一个文件:

import sys 

stdoutOrigin=sys.stdout 
sys.stdout = open("log.txt", "w")
然后返回到代码末尾的屏幕输出:

sys.stdout.close()
sys.stdout=stdoutOrigin

这对于简单的代码应该有效,但对于复杂的代码,还有其他更正式的方法,例如使用。

在python 3+中有一种非常简单的方法:

f=open('filename.txt','w')
打印('something',file=f)
^从这个答案中发现:


因为此方案使用shell命令行启动Python程序,所以所有常用的shell语法都适用。例如,通过此方案,我们可以将Python脚本的打印输出路由到文件以保存它。

我找到了一种快速方法:

log=open(“log.txt”,“a”)
def oprint(消息):
打印(信息)
全局日志
日志写入(消息)
返回()
代码。。。
log.close()
当你想打印东西时,只需使用oprint而不是print

注1:如果要将函数oprint放入模块中,然后导入,请使用:

导入内置项
builtins.log=open(“log.txt”,“a”)

注2:您传递给oprint的应该是一个字符串(因此,如果您在打印中使用逗号分隔多个字符串,您可以将其替换为+)

这非常简单,只需使用此示例即可

导入系统 打开(“test.txt”,“w”)作为sys.stdout: 打印(“你好”)
在使用append选项打开文件后,只需使用两行代码即可将python内置打印函数的输出传递到文件:

with open('filename.txt', 'a') as file:
    print('\nThis printed data will store in a file', file=file)
希望这能解决问题


注意:这段代码适用于python3,但python2目前不受支持。

事实上,这是更通用的:简单的
重定向适用于Windows和几乎所有*nix shell,而不仅仅是bash。谢谢@abarnert,我很高兴不知道Windows cmd,但我坐在距离tcsh创建者约100英尺的地方,所以我当然,我应该知道得更清楚。我已经更新了以反映您的信息。好吧,cmd.exe是DOS command.com的超集,它是CP/M CCP的克隆,有一些小改动,我敢打赌您办公室的人至少对此有模糊的回忆。:)这确实很好,但它不会在终端上打印。“我们能同时在txt和终端上打印吗?”杰希勒斯补充道!似乎是简单的复制,继续向cosole打印您想要的内容,就像您在Python文件中使用
print
log
一样;这里没有具体的变化。现在,在执行python文件
python3yo.py
时,只需将命令替换为
python3yo.py>logs.txt
即可,非常感谢
import sys 

stdoutOrigin=sys.stdout 
sys.stdout = open("log.txt", "w")
sys.stdout.close()
sys.stdout=stdoutOrigin
python script_name.py > saveit.txt
with open('filename.txt', 'a') as file:
    print('\nThis printed data will store in a file', file=file)