.startswith() 和 .endswith() 是两个非常有用的寻找特定扩展名文件的方法。

    1. for f_name in os.listdir('some_directory'):
    2. if f_name.endswith('.txt'):
    3. print(f_name)

    字符串方法匹配的能力是有限的。fnmatch 有对于模式匹配有更先进的函数和方法。

    我们将考虑使用 fnmatch.fnmatch() ,这是一个支持使用 * 和 ? 等通配符的函数。例如,使用 fnmatch 查找目录中所有 .txt 文件,我们可以这样做:

    1. import os
    2. import fnmatch
    3. for f_name in os.listdir('some_directory'):
    4. if fnmatch.fnmatch(f_name, '*.txt'):
    5. print(f_name)

    假设我们想要查找符合特定掉件的 .txt 文件。例如,你可能指向找到包含单次 data 的 .txt文件,一组下划线之间的数字,以及文件名中包含单词 backup 。就类似于 data_01_backup, data_02_backup, 或 data_03_backup 。

    我们可以这样做:

    1. import os
    2. import fnmatch
    3. for f_name in os.listdir('some_directory'):
    4. if fnmatch.fnmatch(f_name, 'data_*_backup.txt'):
    5. print(f_name)

    这里就仅仅打印出匹配 data__backup.txt 模式的文件名称。模式中的 将匹配任何字符。

    这里有一个使用 glob 模块在当前目录下查询所有Python代码文件:

    1. import glob
    2. print(glob.glob('*.py'))

    glob.glob(’*.py’) 搜索当前目录中具有 .py 扩展名的文件,并且将它们以列表的形式返回。 glob 还支持 shell 样式的通配符来进行匹配 :

    1. import glob
    2. for name in glob.glob('*[0-9]*.txt'):
    3. print(name)

    这将找到所有文件名中包含数字的文本文件(.txt) :

    1. data_01.txt
    2. data_01_backup.txt
    3. data_02.txt
    4. data_02_backup.txt
    5. data_03.txt
    6. data_03_backup.txt

    glob 也很容易在子目录中递归的搜索文件:

    1. import glob
    2. for name in glob.iglob('**/*.py', recursive=True):
    3. print(name)

    这里例子使用了 glob.iglob() 在当前目录和子目录中搜索所有的 .py 文件。