Python - 获取文件夹内所有文件

本文最后更新于: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下载。


Python - 获取文件夹内所有文件
https://www.zywvvd.com/notes/coding/python/file-list/python-file-list/
作者
Yiwei Zhang
发布于
2020年2月25日
许可协议