Python 如何得到文件夹下的所有文件
你可以至少有 3 种方法来列出给定文件夹下的所有文件,使用的函数分别为 os.listdir
、os.walk
、glob.glob
。
下面列出的是本教程代码的一些预设条件,
- Python 版本-Python 3
- 给定文件夹的名字为
dirPath
,并且它存在在系统中,所以代码中我们就不必检查文件夹是否存在。
os.listdir
os.listdir
列出了给定文件夹下的所有文件和文件夹,所以我们需要添加额外的代码来只把文件给提取出来。
import os
dirPath = r"C:\git\DelftStack\content"
result = [f for f in os.listdir(dirPath) if os.path.isfile(os.path.join(dirPath, f))]
print(result)
os.listdir
只返回相对给定文件夹 dirPath
的相对路径,但是函数 os.path.isfile
需要的是完整文件夹路径来检查输入是不是文件,所以我们需要用函数 os.path.join
来把 dirPath
和 os.listdir
的结果组合起来,组成文件或文件夹的完整路径。
os.walk
os.walk
可以按照深度优先的顺序遍历整个文件夹,并且当它遍历到一个新的(子)文件夹时候会产生一个 3 个元素的元组-(dirpath
, dirname
, filenames
),这其中也包括最高级别的给定文件夹本身。
给定文件夹下的所有文件都会在 os.walk()
发生器的第一次遍历中产生,所以得到所有文件的最 Pythonic 的方式就是,
import os
dirPath = r"C:\git\DelftStack\content"
result = next(os.walk(dirPath))[2]
print(result)
dirpath
来组成完整的信息。glob.glob
glob
模块是按照给定的文件的模式来去匹配文件夹中的内容,模式遵循的是 Unix shell 中的规则。
glob.glob
返回结果是匹配给定模式的带完整路径的文件名。我们需要查找的是所有文件,它们符合的命名模式是*.*
,这里通配符*
匹配的是任意长度的字符串。
import glob
dirPathPattern = r"C:\git\DelftStack\content\*.*"
result = glog.glob(dirPathPattern)
print(result)
glob.glob
返回的是匹配文件的完整路径,比如 C:\git\DelftStack\content\about.rst
.
上面例子中 glob.glob
方法不能保证列出来的所有结果都是文件,因为它只是检查路径名符不符合给定的模式,但它不检查它到底是一个文件夹还是一个文件夹。比如,假如一个文件夹的名字是 test.test
,它也符合*.*
模式,那这个文件夹也会在结果中出现。
假如你需要确保输出结果只包含文件的话,需要用 os.path.isfile
函数来验证。
相关文章 - Python File
- Python 如何查找具有特定扩展名的文件
- 如何在 Python 中从文件读取特定行
- 在 Python 中读取文本文件并打印其内容
- 在 Python 中实现 touch 文件
- 在 Python 中逐行读取 CSV