2014-09-04 22 views
1

我目前使用fnmatch發現我要複製並忽略其它的文件2份文件名:使用的fnmatch匹配

下面是我的一些腳本只是爲了給怎樣一個例子它被使用了。

pattern = "*.xlsx" 

if fnmatch(name, pattern): 
    source_files.append(os.path.join(path, name)) 

我意識到這是目前還匹配隱藏文件,我不想複製。

我看到解決這個問題的三個選項:

  1. 我既可以排除隱藏文件作爲一個整體。
  2. 我可以排除以~$開頭的文件。
  3. 或者我可以只選擇與Update末開始.xlsx

我覺得最簡單的方法來描述我想要複製是正則表達式的文件類型的文件,但我不認爲fnmatch接受完整的正則表達式。

你會推薦什麼?

回答

2

使用fnmatch的排除某些字符,在docs

In [33]: fnmatch('hello.xlsx', '[!~]*.xlsx') 
Out[33]: True 

In [34]: fnmatch('~hello.xlsx', '[!~]*.xlsx') 
Out[34]: False 

至於還指定在你的問題的最後意見的能力 - 如果你覺得來描述你的文件與正則表達式的最好方法,爲什麼不用re.match(...) is not None替換fnmatch?你必須使用fnmatch

+0

使用'fnmatch'的原因是因爲它是推薦給我的。我是python的新手,特別是使用它來處理像這樣的文件。所以文件匹配和正則表達式是我從未做過的事情。因此我對匹配函數缺乏理解。感謝您的幫助,像魅力一樣工作! – 2014-09-04 14:50:30