fnmatch --- Unix 文件�模�匹�¶
æº�代ç �: Lib/fnmatch.py
æ¤æ¨¡å�—æ��供了 Unix shell é£Žæ ¼çš„é€šé…�符,它们 å¹¶ä¸� ç‰å�ŒäºŽæ£åˆ™è¡¨è¾¾å¼�(关于å�Žè€…的文档å�‚è§� re 模å�—)。 shell é£Žæ ¼é€šé…�符所使用的特殊å—符如下:
模� |
�� |
|---|---|
|
匹�所有 |
|
匹é…�任何å�•个å—符 |
|
匹é…� seq ä¸çš„任何å—符 |
|
匹é…�任何ä¸�在 seq ä¸çš„å—符 |
对于å—é�¢å€¼åŒ¹é…�,请将原å—符用方括å�·æ‹¬èµ·æ�¥ã€‚ 例如,'[?]' 将匹é…�å—符 '?'。
注æ„�文件å��分隔符 (Unix 上为 '/') ä¸�会 è¢«æ¤æ¨¡å�—特别对待。 请å�‚è§� glob 模å�—了解文件å��扩展 (glob 使用 filter() æ�¥åŒ¹é…�文件å��çš„å�„个部分)。 类似地,以一个å�¥ç‚¹æ‰“头的文件å��也ä¸�ä¼šè¢«æ¤æ¨¡å�—特别对待,å�¯ä»¥é€šè¿‡ * å’Œ ? 模å¼�æ�¥åŒ¹é…�。
还è¦�注æ„�是使用将 maxsize 设为 32768 çš„ functools.lru_cache() æ�¥ç¼“å˜ä¸‹åˆ—函数ä¸çš„已编译æ£åˆ™è¡¨è¾¾å¼�: fnmatch(), fnmatchcase(), filter()。
- fnmatch.fnmatch(name, pat)¶
检测文件å��å—符串 name 是å�¦åŒ¹é…�模å¼�å—符串 pat,返回
True或False。 两个形å�‚都会使用os.path.normcase()进行大å°�写æ£è§„化。fnmatchcase()å�¯è¢«ç”¨äºŽæ‰§è¡Œå¤§å°�写æ•�æ„Ÿçš„æ¯”è¾ƒï¼Œæ— è®ºè¿™æ˜¯å�¦ä¸ºæ‰€åœ¨æ“�ä½œç³»ç»Ÿçš„æ ‡å‡†ã€‚can be used to perform a case-sensitive comparison, regardless of whether that's standard for the operating system.这个例å�将打å�°å½“å‰�目录下带有扩展å��
.txt的所有文件�:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
- fnmatch.fnmatchcase(name, pat)¶
检测文件å��å—符串 name 是å�¦åŒ¹é…�模å¼�å—符串 pat,返回
True或Falseï¼›æ¤æ¯”较是大å°�写æ•�感的并且ä¸�会应用os.path.normcase()。
- fnmatch.filter(names, pat)¶
基于 iterable names ä¸åŒ¹é…�模å¼� pat çš„å…ƒç´ æž„é€ ä¸€ä¸ªåˆ—è¡¨ã€‚ 它ç‰ä»·äºŽ
[n for n in names if fnmatch(n, pat)],但实现得更为高效。
- fnmatch.translate(pat)¶
返回由 shell é£Žæ ¼çš„æ¨¡å¼� pat 转æ�¢æˆ�çš„æ£åˆ™è¡¨è¾¾å¼�以便用于
re.match()。示例:
>>> import fnmatch, re >>> >>> regex = fnmatch.translate('*.txt') >>> regex '(?s:.*\\.txt)\\Z' >>> reobj = re.compile(regex) >>> reobj.match('foobar.txt') <re.Match object; span=(0, 10), match='foobar.txt'>
��
- 模�
glob Unix shell é£Žæ ¼è·¯å¾„æ‰©å±•ã€‚