.startswith() 和 .endswith() 是两个非常有用的寻找特定扩展名文件的方法。
for f_name in os.listdir('some_directory'):
if f_name.endswith('.txt'):
print(f_name)
字符串方法匹配的能力是有限的。fnmatch 有对于模式匹配有更先进的函数和方法。
我们将考虑使用 fnmatch.fnmatch() ,这是一个支持使用 * 和 ? 等通配符的函数。例如,使用 fnmatch 查找目录中所有 .txt 文件,我们可以这样做:
import os
import fnmatch
for f_name in os.listdir('some_directory'):
if fnmatch.fnmatch(f_name, '*.txt'):
print(f_name)
假设我们想要查找符合特定掉件的 .txt 文件。例如,你可能指向找到包含单次 data 的 .txt文件,一组下划线之间的数字,以及文件名中包含单词 backup 。就类似于 data_01_backup, data_02_backup, 或 data_03_backup 。
我们可以这样做:
import os
import fnmatch
for f_name in os.listdir('some_directory'):
if fnmatch.fnmatch(f_name, 'data_*_backup.txt'):
print(f_name)
这里就仅仅打印出匹配 data__backup.txt 模式的文件名称。模式中的 将匹配任何字符。
这里有一个使用 glob 模块在当前目录下查询所有Python代码文件:
import glob
print(glob.glob('*.py'))
glob.glob(’*.py’) 搜索当前目录中具有 .py 扩展名的文件,并且将它们以列表的形式返回。 glob 还支持 shell 样式的通配符来进行匹配 :
import glob
for name in glob.glob('*[0-9]*.txt'):
print(name)
这将找到所有文件名中包含数字的文本文件(.txt) :
data_01.txt
data_01_backup.txt
data_02.txt
data_02_backup.txt
data_03.txt
data_03_backup.txt
glob 也很容易在子目录中递归的搜索文件:
import glob
for name in glob.iglob('**/*.py', recursive=True):
print(name)
这里例子使用了 glob.iglob() 在当前目录和子目录中搜索所有的 .py 文件。