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

时间:2014-07-29 19:15:04

标签: python python-2.7

我是Python的新手。我需要查询字典中的项目并将结果保存到文本文件中。这就是我所拥有的:

import json
import exec.fullog as e

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

#Query

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

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

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

如何将打印输出保存到文本文件?

12 个答案:

答案 0 :(得分:5)

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

  • 要写入脚本中的文件,Python提供的用户file I/O tools(这是f=open('file.txt', 'w')内容。

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

  • 如果您想在屏幕上和日志文件中看到输出两者,并且您在Unix上,并且您不想修改您的程序,您可以使用tee commandwindows version also exists,但我从未使用过它)

  • 更好的方法是将所需的输出发送到屏幕,文件,电子邮件,推特,以及使用logging module的任何内容。这里的学习曲线是所有选项中最陡峭的,但从长远来看,它将为自己买单。

答案 1 :(得分:4)

你要求的东西是不可能的,但它可能不是你真正想要的东西。

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

像这样:

with open('outfile.txt', 'w') as outfile:
    print >>outfile, 'Data collected on:', input['header']['timestamp'].date()

只需将>>outfile添加到所有打印语句中,并确保所有内容都在with语句下缩进。


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

outfile.write('Data collected on: {}'.format(input['header']['timestamp'].date()))

但是如果print已经按照格式化的方式做了你想做的事情,你现在可以坚持下去。


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

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

答案 2 :(得分:4)

在脚本中执行此操作的一种快速而肮脏的技巧是将屏幕输出定向到文件:

import sys 

stdoutOrigin=sys.stdout 
sys.stdout = open("log.txt", "w")

,然后返回到代码末尾的输出到屏幕:

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

这应该适用于简单的代码,但是对于复杂的代码,还有其他更正式的方法可以使用,例如使用Python logging

答案 3 :(得分:3)

abarnert的答案是非常好的和pythonic。另一个完全不同的路线(不是在python中)是让bash为你做这个:

$ python myscript.py > myoutput.txt

这通常用于将cli程序的所有输出(python,perl,php,java,binary或其他)放入文件中,有关详细信息,请参阅How to save entire output of bash script to file

答案 4 :(得分:2)

你可能想要这个。最简单的解决方案是

首先创建文件。

通过

打开文件
f = open('<filename>', 'w')

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

如果您要附加到文件

现在,通过

写入同一个文件
f.write(<text to be written>)

使用完毕后关闭文件

#good pracitice
f.close()

答案 5 :(得分:0)

f = open('file.txt', 'w') #open the file(this will not only open the file also 
#if you had one will create a new one on top or it would create one if you 
#didn't have one

f.write(info_to_write_into_the_file) #this will put the info in the file

f.close() #this will close the file handler. AKA free the used memory

我希望这会有所帮助

答案 6 :(得分:0)

这是python 3+中一种非常简单的方法:

f = open('filename.txt', 'w')
print('something', file = f)

^从以下答案中发现:https://stackoverflow.com/a/4110906/6794367

答案 7 :(得分:0)

glDispatchCompute()

由于此方案使用Shell命令行启动Python程序,因此所有常规Shell语法均适用。例如,通过这种方式,我们可以将Python脚本的打印输出路由到文件以进行保存。

答案 8 :(得分:0)

我找到了一种快速的方法:

log = open("log.txt", 'a')

def oprint(message):
    print(message)
    global log
    log.write(message)
    return()

code ...

log.close()

每当您要打印某些内容时,只需使用oprint而不是print。

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

import builtins

builtins.log = open("log.txt", 'a')

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

答案 9 :(得分:0)

这很简单,只需使用此示例

import sys
with open("test.txt", 'w') as sys.stdout:
    print("hello")

答案 10 :(得分:0)

在使用append选项打开文件后,只需使用两行代码,我们就可以简单地将python内置打印函数的输出传递给文件:

with open('filename.txt', 'a') as file:
    print('\nThis printed data will store in a file', file=file)

希望这可以解决问题...

注意:此代码适用于python3,但是,当前不支持python2。

答案 11 :(得分:0)

idx = 0
for wall in walls:
    np.savetxt("C:/Users/vimal/OneDrive/Desktop/documents-export-2021-06-11/wall/wall_"+str(idx)+".csv",
               wall, delimiter=",")
    idx += 1