我这里有这个简单的代码
import os
path = (raw_input("Enter dir: "))
f = open('script_list.log', 'w')
for dirpath, dirname, filenames in os.walk(path):
for filename in [f for f in filenames]:
f.write(str(filename) + "\n")
print os.path.join(dirpath, filename)
当我运行它时,我得到以下信息
Enter dir: scripts
Traceback (most recent call last):
File "C:\Documents and Settings\CRichards\My Documents\My Dropbox\this_code.py", line 8, in <module>
f.write(str(filename) + "\n")
AttributeError: 'str' object has no attribute 'write'
我知道这一定很简单,只是我看不出来。
最佳答案
当您执行 [f for f in filenames]
时,您正在循环中重新绑定(bind) f
。当您到达调用 f.write
的位置时,f
是 filenames
的最后一个成员,因此它是一个字符串。将外部 f
重命名为 log
或 output
之类的名称,或者更好的是,摆脱无用的列表理解:
for file name in filenames:
足够了。
(列表理解不会引入新的作用域。)
关于python - 输出到文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9293530/