python中按照文件夹中文件的排列顺序读取文件内容

本文章已经生成可运行项目,

在处理数据的过程中,文件夹下的文件有时候按照一定的规律命名,按照要求,有时需要将文件夹中的文件按照原始的顺序读取:假设文件目录如图所示:

按照:

base_path = r'E:\download\generator\result'
files = os.listdir(base_path)

返回的files列表会打乱文件的顺序,结果是不固定的。

需要对文件列表进行排序才可以:

files.sort(key=lambda x: int(x.split('.')[0]))

这样就可以按照文件的排列顺序读取文件内容了。

完整代码:

# -*- coding: utf-8 -*-
import os
base_path = r'E:\download\generator\result'
files = os.listdir(base_path)
files.sort(key=lambda x: int(x.split('.')[0]))
for path in files:
    full_path = os.path.join(base_path, path)
    # print(full_path)
    with open(full_path) as fp:
        data = fp.read()
        print(data)


--------------------------------------------------------------end--------------------------------------------------------------------------------

 

本文章已经生成可运行项目
<think>好的,我需要解决用户的问题:如何使用Python按自定义顺序重新排序文件夹中的图像文件。首先,用户提到他们之前遇到了读取图片时顺序混乱的问题,现在希望自定义顺序排列。我需要结合他们提供的引用资料,特别是引用[1]和[2]中提到的方法,以及可能的其他方法。 首先,引用[1]和[2]提到使用os.listdir()读取图片时顺序混乱,解决方法是通过排序文件名。用户现在可能需要更灵活的自定义排序,而不仅仅是按名称升序。可能需要以下步骤: 1. **获取文件列表**:使用os.listdir()获取所有文件,然后筛选出图片文件,比如检查扩展名如.jpg、.png等。 2. **定义排序规则**:用户可能需要按文件名中的数字、日期或其他模式排序。例如,如果文件名包含数字,可以用正则表达式提取数字并转换为整数进行排序。 3. **自定义排序函数**:根据用户的具体需求编写排序函数。例如,按文件名中的数字排序,或者按修改时间排序(引用[3]提到按修改时间排序)。 4. **重命名或移动文件**:排序后可能需要重命名文件以便按顺序处理,或者生成新的有序列表供后续使用。 需要确保代码正确处理文件路径,避免覆盖文件。例如,重命名时可以使用临时目录或添加前缀。此外,注意不同操作系统下路径的写法差异。 用户可能需要示例代码,所以我要参考引用中的代码结构,提供一个清晰的例子。比如,使用sorted函数配合自定义的key参数来排序文件列表。同时,考虑异常处理,比如文件名中没有数字的情况,或者混合不同命名格式的文件。 另外,引用[4]中的plt.imread可能用于读取图片,但用户的问题更多是文件排序,而不是图像处理。所以可能不需要涉及图像库,除非需要根据图像内容排序,但用户的问题中没有提到这点。 总结步骤:获取文件列表、定义排序规则、排序、处理文件(重命名或生成有序列表)。需要给出不同的排序方法示例,比如按数字、按修改时间,或者自定义顺序列表。</think>以下是使用Python按自定义顺序重新排列文件夹中图像文件的方法: ### 一、基础操作步骤 1. **获取文件列表** ```python import os folder_path = "./images" # 指定文件夹路径 all_files = os.listdir(folder_path) ``` 2. **筛选图片文件** ```python image_ext = ['.jpg', '.png', '.jpeg', '.bmp'] image_files = [f for f in all_files if os.path.splitext(f)[1].lower() in image_ext] ``` ### 二、常用排序方法 #### 方法1:按数字序号排序 适用文件名格式:`img_001.jpg` ```python sorted_files = sorted(image_files, key=lambda x: int(''.join(filter(str.isdigit, x)))) ``` #### 方法2:按修改时间排序 (参考引用[3]的倒序思路) ```python sorted_files = sorted(image_files, key=lambda x: os.path.getmtime(os.path.join(folder_path, x)), reverse=True) # 倒序排列 ``` #### 方法3:自定义规则排序 (示例:优先包含"logo"的文件) ```python def custom_sort(filename): if "logo" in filename: return (0, filename) # 优先级别0 else: return (1, filename) sorted_files = sorted(image_files, key=custom_sort) ``` ### 三、应用排序结果 #### 方案1:生成有序文件列表 ```python for idx, filename in enumerate(sorted_files): print(f"第{idx+1}个文件: {filename}") ``` #### 方案2:批量重命名文件 ```python for idx, filename in enumerate(sorted_files): new_name = f"sorted_{idx+1:03d}{os.path.splitext(filename)[1]}" os.rename( os.path.join(folder_path, filename), os.path.join(folder_path, new_name) ) ``` ### 四、进阶应用示例 **按拍摄日期排序(EXIF信息)**: ```python from PIL import Image def get_exif_date(filename): try: img = Image.open(os.path.join(folder_path, filename)) exif = img._getexif() return exif.get(36867) # 拍摄时间标签 except: return "9999:99:99" # 错误处理 sorted_files = sorted(image_files, key=get_exif_date) ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值