2011-09-15 45 views
1

我在/ home/n00b目錄中創建了一個名爲program1.py的文件。 然後我打開Python,我想看看我是否可以寫腳本來找到它的位置。我這樣做:使用os.walk找不到文件()

for f in os.walk('/home/n00b'): 
    print 'searching', f 
    if 'program1.py' in f: 
      print 'found' 
      break 

爲什麼不能正常工作?它似乎在搜索每個文件,因爲我的屏幕填滿了「搜索」部分,但它從來沒有找到它。

+0

對不起,如果代碼看起來很奇怪。 - 從我的iPhone發佈解釋了爲什麼。 ; O – jjJ

回答

4

它不工作,因爲os.walk返回一個3元組:當前目錄,目錄名的名單這裏,和列表文件名的位置:

for curdir, dirs, files in os.walk('/home/n00b'): 
    print 'searching', files 
    if 'program1.py' in files: 
      print 'found' 
      break 

您的打印語句應該表現出你的。 in運算符不會深入研究元組,並且由於您的文件名在任何時候都不是元組中的三個元素之一,所以您的代碼沒有找到它。

+0

啊,這就是爲什麼,呃? Muchos gracias。哈哈! – jjJ

0

函數os.walk()不符合您的期望。它不提供文件列表,而是提供一個包含Directory,Subdirectory和Files的元組(類似於列表)。所以,你可以使用:

for d, s, f in os.walk('/home/n00b'): 
    print 'searching', d 
    if 'program1.py' in f: 
      print 'found' 
      break 

希望它有幫助。

0

你可以改變f - > f [2]來得到walk所返回的元組的第3個元素。

for f in os.walk('/home/n00b'): 
    print 'searching', f 
    if 'program1.py' in f[2]: 
      print 'found' 
      break 
+0

哈!我們都在同一時間......我更喜歡奈德的回答,因爲它告訴你更多關於發生了什麼事情(並且通常更有用),儘管我只需要3字節的變化:P – sillyMunky