2014-01-15 47 views
0

在下面的例子中,使用函數返回值以外定義函數

打印文件

輸出出來作爲None。這是爲什麼?

topdir = 'some_directory' 
exten = '.txt' 

def step(ext, dirname, names): 
    ext = ext.lower() 

    for name in names: 
     if name.lower().endswith(ext): 
      return os.path.join(dirname, name) 

files = os.path.walk(topdir, step, exten) 
print files 

請注意,程序找到正確的文件。我通過使用print而不是return來測試。這只是我無法檢索功能以外的信息。我希望文件是一個數組,所以我可以稍後在程序中使用它。謝謝!

回答

0

step()功能有三個參數(extdirname,並names),但是當你在使用os.path.walk它,你不給它任何 - 它被作爲一個參數,而不是傳遞給函數。嘗試傳遞所需數量的參數,然後查看您的代碼是否可以工作。

+0

好,更精確地說,是OP * *傳遞函數'step'作爲參數,而不是調用該函數並傳遞它的返回值。 – senshin

+0

@ senshin正確,我稍微更新了我的答案以反映這種區別。 – MattDMo

+0

感謝您的快速回復。我不知道step()給出了什麼參數。我是Python新手,在互聯網上找到了上面的例子。你能指導我嗎? – Rohit

0

好吧,經過在網上搜索,我想我有一個解決方案。導入語句在函數內部,因爲我想要自我一致,以便可以從外部調用它。但這是第二步。

如果可以改進這將是很大的。但我認爲,它正是我想要的:

def file_search(dir, pattern): 
    import os 
    import fnmatch 

    images = [pattern] 
    matches = [] 

    for root, dirnames, filenames in os.walk(dir): 
     for extensions in images: 
      for filename in fnmatch.filter(filenames, extensions): 
       matches.append(os.path.join(root, filename)) 
    return matches 

files = file_search('/Users/aging_gorrila/RESEARCH/python_files/', '*.py') 
print files[0] 

我得到以下輸出:

['/Users/aging_gorrila/RESEARCH/python_files/file_search.py'] 
+0

或者你可以簡單地使用glob.glob(路徑+模式) – Rohit