Python 读取指定目录及其子目录下所有文件名

Python 读取指定目录及其子目录下所有文件名

本文博客地址:https://xinancsd.github.io/Python/python_search_folder.html

目标

磁盘中的文件随着积累越来越多,当要寻找某个文件时,使用 windows 的搜索速度太慢且占内存。因此想要寻找一个可以获取指定目录下的所有文件的文件名,作为一种图书馆索引目录式的文件管理方式。

在此使用 python 的os.walk() 函数实现遍历指定目录及所有子目录下的所有文件。使用 python 3.6 版本实现。
walk()函数返回目录树生成器(迭代器)。通过自顶向下遍历目录来生成目录树中的文件名。对于根目录顶部(包括顶部本身)树中的每个目录,它产生一个3元组(dirpath,dirnames,filenames)。dirpath是一个字符串,即目录的路径。

dirnames是dirpath中子目录的名称列表。filenames是dirpath中非目录文件名称的列表。但列表中的名称不包含路径,要得到一个完整路径(从顶部开始)到dirpath中的文件或目录,请执行os.path.join(dirpath,name)。更多详情可查看 python 标准库文档os.walk()

实现代码如下

import os
def all_path(dirname):
    filelistlog = dirname + "\\filelistlog.txt"  
<think> 首先,用户的问题是:“我想查找使用Python读取指定目录下所有图片的方法 请问Python读取指定目录下所有图片的实现方法”。用户提供了三个引用: - 引用[1]:使用glob模块查找特定图片格式的文件。 - 引用[2]:使用os.listdir遍历文件夹并获取文件路径。 - 引用[3]:似乎是读取文件夹下所有jpg图片的示例,但内容有点混乱。 我需要基于这些引用,提供一个清晰的回答,帮助用户实现Python读取指定目录下所有图片的方法。 根据系统指令: - 所有行内数学表达式使用$...$格式(但这里可能不需要数学表达式,因为问题是关于文件操作的)。 - 独立公式使用$$...$$,但同样,可能不需要。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考用户提供的引用。 用户的问题是基于Python的,所以我会提供Python代码示例。 核心方法: 1. **使用glob模块**:glob非常适合查找匹配特定模式的文件路径。 2. **使用os模块**:os.listdir可以列出目录中的所有文件,然后过滤出图片文件。 从引用中: - 引用[1]展示了使用glob查找多种图片格式。 - 引用[2]展示了使用os.listdir遍历并获取路径。 - 引用[3]似乎提到了读取jpg图片,但描述不完整。 我会结合这些方法,给出一个全面的实现。 步骤: 1. 导入必要的模块:osglob。 2. 定义目录路径。 3. 列出所有图片文件路径。 4. 可选:过滤图片文件基于扩展名。 在回答中,我应该: - 解释方法。 - 提供代码示例。 - 自然地添加引用标识。 - 最后,生成相关问题。 回答结构: - 介绍问题。 - 详细解释方法。 - 给出代码实现。 - 总结。 - 生成相关问题。 最后,生成相关问题,如指令所示。 相关问题例子: 1. 如何过滤特定类型的图片? 2. 如何递归遍历子目录? 3. 如何读取图片内容而不是路径? 等等。 确保回答真实可靠。 现在,构建回答。 </think> ### Python读取指定目录下所有图片的实现方法 在Python中,读取指定目录下所有图片文件路径是一个常见任务,通常涉及文件系统操作文件扩展名过滤。基于您提供的引用内容(参考[^1][^2]),主要有两种常用方法: - **使用glob模块**:简洁高效,非常适合匹配特定模式的文件路径(如.jpg或.png)。 - **使用os模块**:更灵活,允许自定义遍历过滤逻辑。 下面我将逐步解释这两种方法,并提供完整的代码实现。代码确保兼容常见图片格式(如.jpg, .jpeg, .png, .gif),您可以轻松扩展或修改扩展名列表。 --- ### 方法1: 使用glob模块(推荐) glob模块通过模式匹配快速查找文件,代码简洁高效,特别适合批量处理图片文件[^1]。 **实现步骤**: 1. 导入osglob模块。 2. 定义图片扩展名列表(如['*.jpg', '*.png'])。 3. 使用glob.glob()函数遍历并匹配所有指定格式的文件。 4. 返回图片文件路径列表。 ```python import os from glob import glob def get_image_paths(folder_path): """ 获取指定目录下所有图片文件的路径列表。 参数: folder_path (str): 目录路径,如 '/path/to/folder' 返回: list: 图片文件路径列表,如 ['/path/to/folder/image1.jpg', ...] """ # 定义常见图片格式扩展名(可根据需要添加,如 '*.bmp') image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp'] image_paths = [] for fmt in image_formats: # 使用glob匹配文件路径,并添加到列表 pattern = os.path.join(folder_path, fmt) image_paths.extend(glob(pattern)) return image_paths # 使用方法 folder_path = '/path/to/your/folder' # 替换为您的目录路径 images = get_image_paths(folder_path) print(f"找到 {len(images)} 张图片,前10个路径:") print(images[:10]) ``` **优点**:代码简洁,自动处理路径拼接;支持通配符匹配,减少手动过滤。 **缺点**:不递归子目录(需要额外处理);扩展名列表需手动定义。 --- ### 方法2: 使用os模块 os模块提供基础文件系统操作,通过os.listdir列出所有文件后,过滤出图片文件[^2]。这种方法更灵活,易于添加自定义逻辑(如读取文件内容)。 **实现步骤**: 1. 导入os模块。 2. 使用os.listdir()获取目录下所有文件名。 3. 遍历文件名,拼接完整路径。 4. 检查文件扩展名是否在图片格式列表中。 5. 返回有效图片路径列表。 ```python import os def get_image_paths(folder_path): """ 获取指定目录下所有图片文件的路径列表(基于扩展名过滤)。 参数: folder_path (str): 目录路径,如 '/path/to/folder' 返回: list: 图片文件路径列表 """ # 定义常见图片扩展名(小写形式,用于过滤) image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp'] image_paths = [] # 检查目录是否存在 if not os.path.exists(folder_path): raise FileNotFoundError(f"目录 '{folder_path}' 不存在") # 遍历目录下所有文件 for filename in os.listdir(folder_path): # 拼接完整路径 file_path = os.path.join(folder_path, filename) # 检查是否为文件(非目录)且扩展名匹配 if os.path.isfile(file_path): file_ext = os.path.splitext(filename)[1].lower() # 获取扩展名并转为小写 if file_ext in image_extensions: image_paths.append(file_path) return image_paths # 使用方法 folder_path = '/path/to/your/folder' # 替换为您的目录路径 images = get_image_paths(folder_path) print(f"找到 {len(images)} 张图片,前10个路径:") print(images[:10]) ``` **优点**:灵活性高,可轻松添加递归或文件属性检查;扩展名过滤更精确。 **缺点**:代码稍长;需手动处理路径拼接。 --- ### 总结 - **推荐方法**:如果目录结构简单,优先使用**glob模块**(方法1),代码更简洁高效。 - **灵活场景**:如果需要自定义过滤或读取文件内容,选用**os模块**(方法2)。 - **注意事项**: - 确保目录路径正确存在(使用绝对路径更可靠)。 - 扩展名列表可自由扩展,如添加'.webp'或'.tiff'。 - 两种方法均返回文件路径列表,后续可通过PIL或OpenCV库读取图片内容[^3]。 如果您想递归读取子目录中的图片,可在方法中添加os.walk()逻辑(例如引用[^2]的扩展)。如需完整读取图片内容而非路径,我可以提供额外代码示例。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值