0

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

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

4 回答 4

1

只需在 if 条件中使用它:

print >>fileout, output #this will save the output to the data.csv file
于 2012-05-02T02:52:57.613 回答
1

首先在程序的最高范围声明您的输出变量。这将允许它以您编程的方式写入文件。

如果您想提示用户保存文件的位置,那就是:

out1 = raw_input("Where would you like to save this? ")

您可以对另一个输出文件变量执行相同的操作。

于 2012-05-02T02:58:21.313 回答
1

更改您的代码...

1:如果你真的想使用打印,将 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))
于 2012-05-02T02:59:30.963 回答
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)
于 2012-05-02T03:08:18.210 回答