Python 如何得到文件夹下的所有文件

Jinku Hu 2023年1月30日
  1. os.listdir
  2. os.walk
  3. glob.glob
Python 如何得到文件夹下的所有文件

你可以至少有 3 种方法来列出给定文件夹下的所有文件,使用的函数分别为 os.listdiros.walkglob.glob

下面列出的是本教程代码的一些预设条件,

  1. Python 版本-Python 3
  2. 给定文件夹的名字为 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 来把 dirPathos.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 函数来验证。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - Python File

相关文章 - Python Dictionary