2012-02-15 101 views
1

我这里有这个简单的代码遇到问题输出到文件

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

是的,我改变了F =开放和f.write登录=开放, log.write解决了它。新鲜的眼睛和一切。非常感谢 – geekcomputers 2012-02-15 12:46:26

回答

5

当你做[f for f in filenames]时,你正在循环重写f。当你调用f.write时,ffilenames的最后一个成员,所以它是一个字符串。重命名外f喜欢的东西logoutput,或更好的,摆脱了无用列表理解的:

for file name in filenames: 

就足够了。

(List内涵不引入新的作用域。)

+0

一旦我看到你的回复,我就立即解决了这个问题,当我改变f = open和f.write来记录它第一次工作时,我完全把f看作f。感谢大家的帮助 – geekcomputers 2012-02-15 12:45:35

3
​​

应改为

for filename in filenames:

+0

现在解决我的代码是导入操作系统 path =(raw_input(“Enter dir:”)) log = open('script_list.log','w') for dirpath,dirname,filenames in os.walk(path): for filename in [f for f in filenames]: log.write(str(filename)+“\ n”) print os.path.join(dirpath,filename) – geekcomputers 2012-02-15 12:47:02