<jupyter_start><jupyter_text>fnmatch fnmatch支持unit shell风格的通配符使用，与正则表达式并不一样。与glob模块类似，但glob是对系统中的文件通过匹配的，则fnmatch则是对字符串操作。 * `*`，匹配0到多个字符* `?`，匹配一个字符* `[seq]`，匹配在中括号中的字符* `[!seq]`，匹配不在中括号中的字符注意：1. `[?]`匹配`?`，表示在中括号中的字符是其原本的含义。2. 路径分隔符`/`并没有特殊含义，但在glob模块中有特殊含义。  fnmatchfnmatch函数的语法为`fnmatch(str, pattern)`，当字符串符合模式则返回True。大小写无关。如果想要大小写相关，则使用fnmatchcase函数。<jupyter_code>import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.py'):
        print(file)<jupyter_output>memory_profiler_test.py
slots_test.py
slots_test2.py<jupyter_text>translate使用translate函数将模式转换为正则表达式字符串。<jupyter_code>import re

regex = fnmatch.translate('*.txt')
print(regex)
reobj = re.compile(regex)
reobj.match('foobar.txt')<jupyter_output>(?s:.*\.txt)\Z
{'fraction_non_alphanumeric': 0.16047745358090185, 'fraction_numerical': 0.005305039787798408, 'mean_word_length': 10.102941176470589, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '618926', 'license': 'MIT', 'n_tokens_mistral': 435, 'n_tokens_neox': 482, 'n_words': 31, 'path': 'python/python_fnmatch.ipynb', 'repo_name': 'icescut/my.summary', 'size': '754'}