我正在尝试列出以' 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
有人可以在这段代码中说明什么是错误的。 还有一种可能的更好的方法来完成上述任务。
答案 0 :(得分:0)
在您的示例代码中,更改 编辑:实际上,这在我的Python解释器中有效。但无论如何,这都是错误的做法。sys.stdout
的值不会影响print
语句,因为print
不会直接使用sys.stdout
。
要打印到文件,您应该在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)