将数据打印到屏幕python后保存

时间:2012-05-02 02:45:45

标签: python

有没有办法在数据打印到屏幕后保存? 例如: 让我们有一些任意的功能

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循环中最后一个范围的最后一个数据。

编辑:我想询问用户是否要保存该数据

4 个答案:

答案 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:使用文件

1

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)

2

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)