我这里有这个简单的代码
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'
我知道它一定很简单,我只是看不到它。
答案 0 :(得分:5)
当您执行f
时,您正在循环中重新绑定[f for f in filenames]
。当你到达f.write
被调用的点时,f
是filenames
的最后一个成员,所以它是一个字符串。将外部f
重命名为log
或output
,或者更好,删除无用的列表理解:
for file name in filenames:
就足够了。
(列表推导不会引入新的范围。)
答案 1 :(得分:3)
for filename in [f for f in filenames]:
应该是
for filename in filenames: