2012-08-30 29 views
1
ls 
[cc]a.txt bba.txt [cc]b.txt bbb.txt 

ipython 

glob.glob("[cc]*") 
[] 
glob.glob("bb*") 
['bba.txt','bbb.txt'] 
glob.glob("[bb]*") 
['bba.txt','bbb.txt'] 

如何才能獲得[cc]a.txt[cc]b.txt匹配? [bb]*中的字符[似乎沒有意義。使用像:python執行shell命令與路徑中的wildchar

glob.glob("\[cc\]*") 
[] 

也爲NULL

回答

5

[][]

的bash:

test $ ls 
[cc]a.txt test.dat test.gp test.py 

蟒:

>>> glob.glob(r'[[]cc[]]*.txt') #yuck ... 
['[cc]a.txt'] 

在通配方面,[ something]意味着匹配任何方括號之間的字符。所以[cc]*.txt相當於c*.txt這不是你想要的。

當然,更強大的解決方案是停止命名文件中包含glob字符的文件; ^)。

+0

如果不使用glob.glob。如何使用其他方法可以抽樣使用'['匹配? – jiamo

+0

@yanxinyou - 我不完全確定你在問什麼。如果您正在尋找不同的選項,您可以使用'os.listdir'並根據手動正則表達式篩選結果... – mgilson

+0

thankyou。我想用[somethins] *來匹配一些文件,然後移動它。我使用[[]替換[和]]]。它工作正常。 – jiamo

3

不幸的是,你不能簡單地轉義*,?,[,]字符。賦予http://bugs.python.org/issue8402

爲fnmatch.translate的文檔,這是最終得到 叫,說:有沒有辦法來引用元字符。抱歉。

解決方案比較複雜,正如mgilson所解釋的那樣。

+0

不錯。感謝您追蹤有關此文件。 (1) – mgilson