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

Python如何用列表推导式匹配双目录日期对应文件名并解决空输出问题

问题解决方法

原代码错误原因

  • 日期格式不统一:dir_2提取的日期是YYYY-MM-DD带分隔符格式,dir_1提取的是YYYYMMDD无分隔符格式,二者无法匹配
  • 变量名错误:提取dir_1文件日期时,re.search的第二个参数误写为未定义的dir_1_date,应该传入当前遍历的文件名dir_1_file
  • 匹配逻辑错误:列表推导式中直接判断file == dir_1_date,应该判断文件内包含的日期与目标日期匹配
  • 输出格式未处理:原dir_2文件名带横杠,需要按期望输出格式删除横杠

修正后的基础实现代码

import os
import re

# 定义目录路径
dir1_path = r"c:\data\desktop\pointA\txt-files"
dir2_path = r"c:\data\desktop\pointB\txt-files"

dir1_files = os.listdir(dir1_path)
dir2_files = os.listdir(dir2_path)

# 预处理dir2的日期和对应输出文件名,存储为字典提升查找效率
dir2_date_map = {}
for file in dir2_files:
    date_with_sep = re.search(r"MM(.+?)-AB", file).group(1)
    # 将带横杠的日期转为纯8位数字格式,和dir1的日期格式统一
    date_pure = date_with_sep.replace("-", "")
    # 生成要求的输出格式文件名
    output_name = f"MM{date_pure}AB.dat"
    dir2_date_map[date_pure] = output_name

# 遍历dir1文件匹配输出
for file in dir1_files:
    # 跳过非txt文件
    if not file.endswith(".txt"):
        continue
    date_match = re.search(r"_(\d{8})-", file)
    if not date_match:
        continue
    dir1_date = date_match.group(1)
    if dir1_date in dir2_date_map:
        print(dir2_date_map[dir1_date])

列表推导式实现

可以通过列表推导式一次性得到所有匹配结果:

# 列表推导式直接生成匹配结果列表
match_result = [
    dir2_date_map[re.search(r"_(\d{8})-", f).group(1)]
    for f in dir1_files
    if f.endswith(".txt") 
    and re.search(r"_(\d{8})-", f) 
    and re.search(r"_(\d{8})-", f).group(1) in dir2_date_map
]

# 逐行打印输出
for item in match_result:
    print(item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:39:05