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]*意味をなさないようです。次のように使用します:

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

また、NULLです

4

2 に答える 2

5

[で囲み]ます[]

bash:

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

Python:

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

グロブに関しては[ something]、角かっこで囲まれた文字のいずれかに一致することを意味します。だから、あなたが望むものではない[cc]*.txtのと同等です。c*.txt

もちろん、より堅牢な解決策は、グロブ文字を含むファイルの命名を停止することです; ^)。

于 2012-08-30T14:16:05.463 に答える
3

残念ながら、*、?、[、]文字を単純にエスケープすることはできません。http://bugs.python.org/issue8402を授与ます:

最終的に呼ばれるfnmatch.translateのドキュメントには、次のように書かれています。メタ文字を引用する方法はありません。ごめん。

mgilsonによって説明されているように、解決策はより複雑です。

于 2012-08-30T14:19:24.437 に答える