有没有办法在数据打印到屏幕后保存? 例如: 让我们有一些任意的功能
def main():
if something:
for i in range(n):
output= "%f %f" %(n,d)
print output
if something:
for i in range(n):
output="%f %f" %(n,d)
print output
fileout=open("data.csv", "a")
fileout.write(output)
这只会写入for循环中最后一个范围的最后一个数据。
编辑:我想询问用户是否要保存该数据
答案 0 :(得分:1)
只在if条件中使用它:
print >>fileout, output #this will save the output to the data.csv file
答案 1 :(得分:1)
首先在程序的最高范围内声明输出变量。这将允许它以您编程的方式写入文件。
如果您想提示用户提供保存文件的位置,那只是这样:
out1 = raw_input("Where would you like to save this? ")
您可以对另一个输出文件变量执行相同的操作。
答案 2 :(得分:1)
更改您的代码......
1:如果您确实想使用print,请将sys.stdout更改为其他流
2:使用文件
import sys
oldstdout=sys.stdout
f=open("myfile","w")
sys.stdout=f
def main():
if something:
for i in range(n):
print "%f %f"%(n,d)
if something:
for i in range(n):
print "%f %f"%(n,d)
f=open("myfile","w")
def main():
if something:
for i in range(n):
f.write("%f %f"%(n,d))
if something:
for i in range(n):
f.write("%f %f"%(n,d))
答案 3 :(得分:1)
这是一个(有点病态的)示例,它允许您同时print
并保存您在全局列表中打印的语句(我们称之为OUTPUT
):
import sys
OUTPUT = []
def print_wrapper(method):
class result(object):
def __init__(self, file_obj):
self.file_obj = file_obj
def __getattr__(self, name):
return getattr(self.file_obj, name)
def write(self, value):
OUTPUT.append(value)
return self.file_obj.write(value)
return result(method)
original_stdout = sys.stdout
sys.stdout = print_wrapper(original_stdout)
# This will still print, but will add 'Hi' and '\n' to OUTPUT as well
print 'Hi'
# This will still print, but will add 'None' and '\n' to OUTPUT as well
print None
# This uses the original stdout to print, so won't change OUTPUT
original_stdout.write(repr(OUTPUT))
original_stdout.write('\n')
或者您也可以为Python 3做好准备(或者只是使用它)并自己包装print
方法:
from __future__ import print_function # must have Python >= 2.6
OUTPUT = []
def wrap_print(method):
def result(value):
OUTPUT.append(value)
return method(value)
return result
old_print = print
print = wrap_print(old_print)
print('Hi')
print(None)
old_print(OUTPUT)