2012-05-23 56 views
0
的完整的文件路徑

比方說,我有一個文件列表,如SFTP爲一組文件

files = ["C:\\MyDir\\some_file.txt", 
     "C:\\MyDir\\another_file.txt", 
     "C:\\MyDir\\some_file.old"] 

我想拔出名爲「.txt」文件,與‘一些’開始。我使用標準的fnmatch.filter方法:

my_files = fnmatch.filter([os.path.basename(i) for i in files], "some*.txt") 

返回[「some_file.txt」]。現在我們假設這些文件實際上位於SFTP站點上,並且我想在過濾之後從SFTP站點下載它們。如何獲得我要下載的文件的完整文件路徑?

os.path.abspath("some_file.txt") 

將不起作用的原因很明顯。我可以簡單地用另一個通配符(「*」)作爲我的過濾器模式的前綴,但這是一種解決方法。有沒有一種乾淨的方式來做到這一點?

回答

0

如果你想要完整的路徑名,那麼你必須在完整的路徑名上應用過濾器。 fnmatch模式有點有限,無論如何轉換爲正則表達式,爲什麼不直接使用re

import re 
files = ["C:\\MyDir\\some_file.txt", 
    "C:\\MyDir\\another_file.txt", 
    "C:\\MyDir\\some_file.old"] 

patern = re.compile(r"\\some[^\\]*\.txt$", re.I) 
filtered_files = [f for f in files if pattern.search(f)]