匹配胸片图像路径到Pandas DataFrame的技术方案及代码咨询
匹配胸片文件名到DataFrame并处理多路径情况
问题描述
现有一个包含findings、impression、file_Name三列的Pandas DataFrame(file_Name含目录信息),同时有一个胸部X光图像目录,结构为home/files/f1至home/files/f11,每个子文件夹下有数千张.jpg格式胸片。需要遍历该目录,将匹配到的图像路径存入DataFrame新列;同时需处理同一file_Name对应多幅图像的场景。
解决思路
- 先预扫描所有图像文件,建立文件名到路径列表的映射字典,避免重复遍历目录提升效率
- 利用字典快速匹配DataFrame中的
file_Name,直接获取对应路径 - 对多路径的情况,可选择存储路径列表、取第一个路径或标记多匹配状态
代码实现
1. 导入依赖库
import os import pandas as pd
2. 构建文件名-路径映射字典
# 图像根目录 root_dir = "/home/files" # 初始化映射:key为文件名,value为对应路径的列表 file_path_map = {} # 遍历f1至f11子文件夹 for folder_name in os.listdir(root_dir): folder_path = os.path.join(root_dir, folder_name) # 过滤非目标文件夹 if not (folder_name.startswith("f") and folder_name[1:].isdigit() and 1 <= int(folder_name[1:]) <= 11): continue if not os.path.isdir(folder_path): continue # 遍历文件夹内的jpg文件 for file_name in os.listdir(folder_path): if file_name.lower().endswith(".jpg"): full_path = os.path.abspath(os.path.join(folder_path, file_name)) # 追加路径到对应文件名的列表中 if file_name in file_path_map: file_path_map[file_name].append(full_path) else: file_path_map[file_name] = [full_path]
3. 匹配到DataFrame并处理多路径
# 假设你的DataFrame名为df # 新增列存储所有匹配到的路径列表 df["image_paths"] = df["file_Name"].map(lambda x: file_path_map.get(x, [])) # 可选:根据业务需求处理多路径场景 # 场景1:只保留第一个匹配的路径 df["first_image_path"] = df["image_paths"].apply(lambda x: x[0] if x else None) # 场景2:标记是否存在多幅匹配图像 df["has_multiple_images"] = df["image_paths"].apply(lambda x: len(x) > 1)
补充说明
- 预扫描目录仅需执行一次,后续匹配操作效率极高
- 若
file_Name包含目录前缀,可改用os.path.basename(x)提取纯文件名进行匹配 - 对于多路径条目,可根据需求扩展逻辑:比如取最新修改的路径、存储所有路径供后续人工核对等
内容的提问来源于stack exchange,提问作者user10019553
相关产品推荐
相关产品推荐

