本文最后更新于:2022年8月5日 晚上
本文记录Python 获取指定文件夹内所有文件的方法。
测试环境
新建了3个文件夹和11个文件

glob
glob模块可以返回指定路径(可绝对/可相对)下的符合制定匹配模式的文件路径。
*
: 匹配0或多个任意字符
?
: 匹配单个字符
[]
: 匹配范围内的字符(如[a-d]
匹配a,b,c,d)
glob.glob
返回所有匹配文件路径列表,参数为pathname,该参数中定义路径匹配规则。
用例1
1 2 3 4 5
| import glob file_path='*' print(glob.glob(file_path))
>>> ['3', 'a', '3b', 'b', '1', '2b', '2a', '1a', '2', '3a', 'glob_test.py', '1b']
|
用例2
1 2 3 4 5
| import glob file_path='*[0-9]' print(glob.glob(file_path))
>>> ['3', 'd2', '1', '2', 'd3', 'd1']
|
用例3
1 2 3 4 5
| import glob file_path='?' print(glob.glob(file_path))
>>> ['3', 'a', 'b', '1', '2']
|
用例4
1 2 3 4 5
| import glob file_path='*b' print(glob.glob(file_path))
>>> ['3b', 'b', '2b', '1b']
|
glob.iglob
iglob返回generator对象,每次调用返回一个路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import glob file_path='*' generator=glob.iglob(file_path) for item in generator: print(item)
>>> 3 a 3b d2 b 1 2b 2a 1a 2 d3 3a glob_test.py d1 1b
|
OS
glob方便好用,但是从上述用例输出可以看出glob难以区分文件夹和文件,只识别名称,虽然绝大多数情况文件有后缀,为以往万一,在此补充OS返回指定文件夹下文件名的方法。
OS.walk
OS.walk(filepath) 返回指定目录下所有目录、文件、子目录下的目录、文件。
1 2 3 4 5 6 7 8 9
| import os filePath = '.' for i,j,k in os.walk(filePath): print(i,j,k)
>>> . ['d2', 'd3', 'd1'] ['3', 'a', '3b', 'b', '1', '2b', '2a', '1a', '2', '3a', 'glob_test.py', '1b'] ./d2 [] [] ./d3 [] [] ./d1 [] []
|
- i:父目录路径
- j:父目录内文件夹
- k:父目录内文件
os.listdir
os.listdir(filepath)和glob.glob(‘*’)效果类似,返回文件夹下所有文件与文件夹名。
1 2 3 4
| filePath = '.' print(os.listdir(filePath))
>>> ['3', 'a', '3b', 'd2', 'b', '1', '2b', '2a', '1a', '2', 'd3', '3a', 'glob_test.py', 'd1', '1b']
|
获取源码
文中测试环境与所有源码可在Github下载。