2012-02-15 106 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