输出未重定向到python中的文件

时间:2015-05-16 04:22:16

标签: python

我正在尝试列出以' e'开头的所有文件。在/中使用os.walk()。但是代码似乎没有将输出重定向到文件而是显示在IDE上。

import os, sys

out = sys.stdout
with open('output.txt', 'w') as outfile:
     sys.stdout = outfile
     for root, dirs, files in os.walk('/'):
         for file in files:
             if file.startswith('e'):
                 print file
     sys.stdout = out

有人可以在这段代码中说明什么是错误的。 还有一种可能的更好的方法来完成上述任务。

2 个答案:

答案 0 :(得分:0)

在您的示例代码中,更改sys.stdout的值不会影响print语句,因为print不会直接使用sys.stdout 编辑:实际上,这在我的Python解释器中有效。但无论如何,这都是错误的做法。

要打印到文件,您应该在print语句或函数调用中指定该文件。在Python 2中,print是一个语句,您可以指定如下文件:

with open('output.txt', 'w') as outfile:
    print >> outfile, "Hello, world!"

在Python 3中,print()是一个带有可选file参数的函数:

with open('output.txt', 'w') as outfile:
    print("Hello, world!", file=outfile)

或者,您可以使用打开文件对象的方法,例如write()

with open('output.txt', 'w') as outfile:
    outfile.write("Hello, world!\n")

答案 1 :(得分:0)

对于Python 2:

import os

path = r"/"
outfile = 'output.txt'

with open(outfile, 'w') as fh:
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.startswith('e'):
                print >> fh, file

有关打印的说明,请参阅文档:https://docs.python.org/2/reference/simple_stmts.html#the-print-statement

和Python 3:

import os

path = r"/"
outfile = 'output.txt'

with open(outfile, 'w') as fh:
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.startswith('e'):
                print(fh, file=outfile)