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.md.

警告

上面例子中glob.glob方法不能保证列出来的所有结果都是文件,因为它只是检查路径名符不符合给定的模式,但它不检查它到底是一个文件夹还是一个文件夹。比如,假如一个文件夹的名字是test.test,它也符合*.*模式,那这个文件夹也会在结果中出现。 假如你需要确保输出结果只包含文件的话,需要用os.path.isfile函数来验证。