我需要访问一组文件。
我如何遍历文件的内容?
是否可以过滤我想要获取的文件?例如只有
.jpg
如果您想要不同子文件夹中的所有文件怎么办?也就是说,包含所有子文件夹“ Class_X ”的所有内容:
imagenes
|
|
|-------- train
| |
| |----- Clase_1
| | |
| | imagen_1.jpg
| | imagen_2.png
| | datos.csv
| | ... etc
| |
| |----- Clase_2
| | |
| | imagen_1_1.jpg
| | imagen_2_1.png
| | datos.csv
| | ... etc
|
|
|-------- test
| |
| |----- Clase_1
| | |
| | imagen_1_t.jpg
| | imagen_2_t.png
| | datos.csv
| | ... etc
| |
| |----- Clase_2
| | |
| | imagen_1_2_t.jpg
| | imagen_2_2_t.png
| | datos.csv
| | ... etc
从 Python 访问文件和文件夹的最重要的模块是
os
. 当我们安装 Python(内置模块)时,默认情况下会出现这个模块。该模块也被广泛使用glob
。我将继续使用问题中的示例来回答问题。1.如何循环浏览文件夹中的内容?
我们可以使用模块
os
和它的函数listdir
来做到这一点,我们传递我们想要拥有它的文件的文件夹的路径。例如,假设我们要访问Clase_1
属于的文件夹train
:输出:
["imagen_1.jpg", "imagen_2.png", "datos.csv", ...]
我们也可以对 做同样的事情
glob
,在这种情况下,我们会通过特殊字符要求您*
将文件夹中的所有内容都包含在内输出:
["imagen_1.jpg", "imagen_2.png", "datos.csv", ...]
2.如何过滤文件?
我们可以简单地创建一个
for
带有条件的循环if
来过滤我们想要的文件,例如,如果我们只想要.png
:输出:
["imagen_2.png", ...]
它也可以
glob
更容易地完成,因为这个函数为我们实现了循环for
和条件:输出:
["imagen_2.png", ...]
最后对于这个答案,我分别离开如何处理
os
以及glob
如果我们想要获得不止一种类型的文件,例如:.png
和.jpg
:3. 如何获取不同的子文件夹和文件?
在这种情况下,有必要使用
os.walk()
这个函数,一个目录的路径被传递给它,它为我们提供了它所包含的所有内容 levels,这意味着这个函数返回我们一个元组的元组,其中包含访问的级别,这样我们就可以在for
我们想要的任何级别在循环中解包,在这个例子中,图像:输出
我们可以通过多种方式展平这个列表列表以获得最终结果,在这里我
lambda
为它创建一个函数:输出:
1. 如何游览?
我建议既用模块,
glob
又用模块方法glob
。Path
pathlib
第一种情况:
但这适用于 >= 到 3.5 的版本。否则,您可以只指定必要的子目录:
在第二种情况下:
导致:
2. 是否可以过滤我想要获取的文件?例如只有 .jpg
我的建议是使用我上面提到的内容,但要强调一个事实,即 jpg 文件名(相信扩展名对应于文件类型)将以字符串“.jpg”结尾。
然后:
产生字符串列表:
3. 如果您想要不同子文件夹中的所有文件怎么办?
所以我们只需删除我们放入的简单过滤器:
产生字符串列表:
请注意我如何使用作为参数传递的模式
glob
。