利用列表推导式遍历子目录PDF文件

一、问题的提出

之前,我们探索了如何用Python来遍历子目录文件,可以采用pathlib,os等来实现,可谓是无法八门,但是上面提到的方法用到的代码还是有点儿多,于是,我考虑如何用列表推导式来减少代码,使程序运行的速度更快。

二、列表推导式遍历子目录

  1. 目标:遍历当前目录及子目录下所有的pdf文件,包括后缀是.PDF的文件
  2. 方法:我们尝试了以下几种方法
import os,glob
from pathlib import Path
files = os.scandir()
print([file.name for file in os.scandir() if file.is_file() and file.name.endswith(".pdf")])  #第一种方法
print([file for file in os.listdir() if file.endswith(".pdf")]) # 第二种方法
print([file.name for file in Path(".").rglob(r"*.pdf")]) #第三种方法
print([file for file in os.walk(".")][0][2]) # 第四种方法
print([file for file in glob.glob("*.pdf")]) # 第五种方法

3. 效果展示

效果展示

3. 方法评估

第一种方法用scandir(),速度要快于os.walk(),可以获取子目录。第二种方法无法获取子目录,所以当遍历所有子目录时,建议用scandir()。

第三种方法和第五种方法,可以实现遍历扩展名为【.pdf】和【.PDF】的文件,而不用指定扩展名大小写,因此较为精确,因此推推荐第三种和第五种方法。

第四种方法用os.walk()和列表推导式只能得出子目录的文件,不能指定文件属性,因此较为不便。

三、学后反思

  1. 知道了如何遍历子目录,还需要知道如何快速遍历,因为有时文件比较多。
  2. 列表推导式在遍历目录时可以简化流程,减少代码量,提升效率,因此可以在Python中多多使用。
  3. 残途同归的多种方法可以为我们提供解决问题的不同思路,便于我们进行比较,找到更为合适的方法。

猜你喜欢

转载自blog.csdn.net/henanlion/article/details/130795699