如何找出两个文件夹中名称前缀相同的对应文件子列表
匹配两个文件列表中前缀相同的文件
嘿,这事儿不难!咱们先理清楚:你需要从list_1(CSV文件)和list_2(JSON文件)里找出那些核心名称部分一致的文件对——比如12_a1_pp.csv对应12_a1.json,核心就是12_a1对吧?
步骤拆解
- 提取每个文件的匹配键:
- 对于CSV文件(
list_1里的),文件名格式是[核心名]_pp.csv,去掉末尾的_pp.csv就能得到核心键。 - 对于JSON文件(
list_2里的),文件名格式是[核心名].json,直接去掉.json就能得到核心键。
- 对于CSV文件(
- 找出共同的键:把两个列表的核心键取交集,这些就是存在对应文件的标识。
- 筛选对应文件:根据共同的键,分别从两个列表里挑出匹配的文件。
代码实现
from os import listdir # 读取文件列表(你原来的代码) list_1 = [file for file in listdir("./folder1/") if file.endswith(".csv")] list_2 = [file for file in listdir("./folder2/") if file.endswith(".json")] # 定义函数提取匹配键 def get_csv_key(filename): # 去掉末尾的"_pp.csv",长度为7个字符 return filename[:-7] def get_json_key(filename): # 去掉末尾的".json",长度为5个字符 return filename[:-5] # 生成键到文件名的映射(兼容可能的重名情况) csv_key_map = {get_csv_key(f): f for f in list_1} json_key_map = {get_json_key(f): f for f in list_2} # 找出共同的键 common_keys = set(csv_key_map.keys()) & set(json_key_map.keys()) # 生成对应的匹配子列表 matched_csv = [csv_key_map[key] for key in common_keys] matched_json = [json_key_map[key] for key in common_keys] # 输出结果 print("匹配的CSV文件:", matched_csv) print("匹配的JSON文件:", matched_json)
运行结果(对应你的示例数据)
匹配的CSV文件: ['12_a1_pp.csv', '32_a3_pp.csv'] 匹配的JSON文件: ['12_a1.json', '32_a3.json']
灵活适配小技巧
如果你的文件名格式有变动(比如_pp不是固定后缀),可以换一种方式提取核心键——比如按下划线分割取前两部分:
def get_csv_key(filename): parts = filename.split("_") return "_".join(parts[:2]) def get_json_key(filename): # 先去掉.json后缀,再分割下划线 name_part = filename.split(".")[0] parts = name_part.split("_") return "_".join(parts[:2])
这样就算后缀有变化,只要核心的xx_xx部分一致,也能精准匹配~
内容的提问来源于stack exchange,提问作者DeltaIV
相关产品推荐
相关产品推荐

