python学习—查找指定目录下的指定类型文件

系列文章目录

python学习—合并TXT文本文件
python学习—探索嵌套文件夹,统计文件数量及构建索引表格



功能说明

日常工作中,有时候会统计一些文件列表,如对截图文件夹中的图片进行统计列表;
遍历某个盘符或目录下的指定格式文件列表。
本代码目标为:

  • 1 指定目录;
  • 2 指定文件类型;
  • 3 导出文件列表txt。

1 准备工作

首先在D盘根目录下建立文件夹“临时”,在该文件夹内存放多个jpg格式图片文件,内容随意。
再该目录下新建文件夹,继续放入图片文件,实现目录嵌套。

2 第一版代码

第一版本的代码,主要实现导出列表的操作。

(1) 指定查找目录、查找文件类型

directory = r"D:\\临时"  # 指定查找目录
file_type = ".jpg"   # 指定查找文件类型

(2) 新建空缓存列表,准备存放 文件列表。

file_list = []  # 存储文件路径的列表

(3) 遍历

for root, dirs, files in os.walk(directory):
    for file in files:

(4) 判定文件类型,即 文件扩展名(后缀名)

知识点: 关于文件扩展名(后缀名)
文件扩展名(Filename Extension)也称为文件的后缀名,是Windows操作系统用来标记文件类型的一种机制,或者符号。扩展名几乎是每个文件必不可少的一部分。如果一个文件没有扩展名,那么操作系统就无法辨别这个文件,不能区分它属于什么类型,从而无法判断到底使用哪款软件进行处理此文件。
文件名与扩展名由英文字符 点 “ . “ 分隔。如 xxx.docxxx.jpgxxx.txt
在Windows系统中,文件的扩展名需要“文件夹选项”中 取消勾选 “隐藏已知文件类型的扩展名”选项,否则看不到文件的后缀名。

python中截取文件扩展名的函数为 :endswith(file_type)
功能是获取文件的扩展名(包含 点 . )

防止字符大小写不一致,先行将文件名统一改为 小写字母。
函数为:str.lower() 转换为小写
str.upper() 转换为 大写。

        if file.lower().endswith(file_type):  # 判断文件是否为JPG文件

(5) 获取文件 路径,存入 缓存列表

            file_path = os.path.join(root, file)  # 获取文件的完整路径
            file_list.append(file_path)  # 将文件路径添加到列表中

(6) 将列表写入 文件列表txt

使用 with 语句 在进入和退出代码块时自动处理文件的打开和关闭,从而避免了手动管理文件资源的需要。这有助于确保文件在使用后能够被正确关闭,即使是在发生异常的情况下。

with open(os.path.join(directory, "文件列表.txt"), "w") as f:
    for file_path in file_list:
        f.write(file_path + "\n")

(7) 第一版完整代码

import os

directory = r"D:\\临时"  # 指定查找目录
file_type = ".jpg"   # 指定查找文件类型

# 遍历指定目录(包括子目录)下的 指定 格式文件
file_list = []  # 存储文件路径的列表
for root, dirs, files in os.walk(directory):
    for file in files:
        if file.lower().endswith(file_type):  # 判断文件是否为JPG文件
            file_path = os.path.join(root, file)  # 获取文件的完整路径
            file_list.append(file_path)  # 将文件路径添加到列表中

# 将文件路径写入文件列表.txt
with open(os.path.join(directory, "文件列表.txt"), "w") as f:
    for file_path in file_list:
        f.write(file_path + "\n")

运行效果:
效果

3 第二版代码

第一版的代码已经能够实现主要功能。后续主要优化代码运行效率。

(1) 用函数,打包文件名写入txt的过程。

# 函数用于优化打开文件的方式,减少资源占用
def write_file_list(file_list):
    with open(os.path.join(directory, "文件列表.txt"), "w") as f:
        for file_path in file_list:
            f.write(os.path.relpath(file_path, directory) + "\n")

(2) 完整代码

import os

directory = r"d:\临时"  # 指定查找目录
file_type = ".jpg"  # 指定查找文件类型

# 函数用于优化打开文件的方式,减少资源占用
def write_file_list(file_list):
    with open(os.path.join(directory, "文件列表.txt"), "w") as f:
        for file_path in file_list:
            f.write(os.path.relpath(file_path, directory) + "\n")

# 遍历指定目录(包括子目录)下的指定格式文件
file_list = []
for root, dirs, files in os.walk(directory):
    for file in files:
        if file.lower().endswith(file_type):  # 判断文件是否为JPG文件
            file_path = os.path.join(root, file)  # 获取文件的完整路径
            file_list.append(file_path)  # 将文件路径添加到列表中

# 将文件路径写入文件列表.txt,使用相对路径使文件更易于理解
write_file_list(file_list)

运行效果一样。

4 后记

使用windows的批处理,也可以实现该效果。
方法:新建txt文件,写入“dir *.jpg /b/s> list.txt”,然后修改后缀名为 “.bat”。
放在准备统计的目录里,右键——运行,即可生成文件列表。

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

da-peng-song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值