You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何按相同顺序读取两个文件夹内的对应文件?

问题原因
  • os.listdir()返回的文件顺序不固定,由操作系统的文件系统决定,即使两个文件夹里的文件名完全一致,读取时也可能因为系统排序逻辑(比如文件创建时间、存储位置)导致顺序不同。
  • 你当前的代码直接用os.listdir()的结果生成文件路径,没有做统一排序,所以两个文件夹的文件顺序会不一致。
解决方法

核心是基于文件名对文件列表进行统一排序,同时尽量避免切换工作目录(os.chdir()),减少潜在问题。具体步骤:

  1. 不切换目录,直接拼接完整文件路径,避免当前工作目录被修改。
  2. 提取每个文件的纯文件名(比如从F:/.../asmr_1.txt中取出asmr_1.txt),以此为依据排序。
  3. 对两个文件夹的文件列表都执行相同的排序逻辑,就能保证顺序一致。
修正后的完整代码
import os
from pathlib import Path
import glob

def reading_file_to_array(sub_dir_name, current_path):
    # 直接拼接完整文件夹路径,不用切换目录
    dir_path = os.path.join(current_path, sub_dir_name)
    # 获取所有txt文件的完整路径
    files_path = [os.path.join(dir_path, x) for x in os.listdir(dir_path) if x.endswith(".txt")]
    # 基于纯文件名排序,确保顺序统一
    files_path.sort(key=lambda x: os.path.basename(x))
    
    # 这里写你原本的文件读取处理逻辑,示例如下(替换成你的实际逻辑)
    psnr_1080p = []
    psnr_720p = []
    psnr_480p = []
    psnr_360p = []
    psnr_160p = []
    
    for file in files_path:
        with open(file, 'r') as f:
            # 假设每行对应一个分辨率的数据,根据你的实际需求调整
            lines = f.readlines()
            psnr_1080p.append(lines[0].strip())
            psnr_720p.append(lines[1].strip())
            psnr_480p.append(lines[2].strip())
            psnr_360p.append(lines[3].strip())
            psnr_160p.append(lines[4].strip())
    
    return psnr_1080p, psnr_720p, psnr_480p, psnr_360p, psnr_160p

current_path = 'F:/RD_data_from_twitch_system/RD_data_from_twitch_system'
all_sub_dir_paths = glob(str(current_path) + '/*/') 
all_sub_dir_names = [Path(sub_dir).name for sub_dir in all_sub_dir_paths] 

bitrate_data = None
psnr_data = None

for sub_dir in all_sub_dir_names:
    if sub_dir == 'bitrate':
        bitrate_data = reading_file_to_array(sub_dir, current_path)
    elif sub_dir == 'psnr':
        psnr_data = reading_file_to_array(sub_dir, current_path)

# 提取对应数据,此时bitrate和psnr的文件顺序完全一一对应
bitrate_1080p, bitrate_720p, bitrate_480p, bitrate_360p, bitrate_160p = bitrate_data
psnr_1080p, psnr_720p, psnr_480p, psnr_360p, psnr_160p = psnr_data
关键改动说明
  • 移除了os.chdir(),改用os.path.join()直接拼接路径,避免切换目录引发的潜在问题。
  • 新增files_path.sort(key=lambda x: os.path.basename(x)),按纯文件名排序,确保两个文件夹的文件顺序完全匹配。
  • 优化了主程序的变量赋值逻辑,代码更简洁清晰。

内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:11:51