我是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']
如何将打印输出保存到文本文件?
答案 0 :(得分:5)
让我总结所有答案并添加更多答案。
要写入脚本中的文件,Python提供的用户file I/O tools(这是f=open('file.txt', 'w')
内容。
如果您不想修改程序,可以使用流重定向(windows和Unix-like systems)。这是python myscript > output.txt
的内容。
如果您想在屏幕上和日志文件中看到输出两者,并且您在Unix上,并且您不想修改您的程序,您可以使用tee command(windows version also exists,但我从未使用过它)
答案 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)
答案 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