批量读取XML文件及基于节点信息创建目录重命名图片问题
问题解决方案
1. 批量读取目录下所有XML文件
你报错的核心原因是res是存储多个文件路径的列表,但open()函数仅接受单个字符串路径,无法直接传入列表。另外原代码未过滤文件扩展名,会误处理目录内的非XML文件,需要补充筛选逻辑。
推荐用glob模块快速匹配所有XML文件,再循环逐个读取处理,代码示例:
import os from glob import glob from bs4 import BeautifulSoup as bs dir_xml = r"你的XML目录绝对路径" def get_filename(_content): bs_content = bs(_content, "html.parser") # 你的节点属性提取逻辑... picture_path = f'{pm_1}{pm_2}\\{pm_3}\\{pm_4}\\{pm_5}_{pm_6}_{pm_7}\\{pm_8}\\{pm_9}.jpg' return picture_path # 返回路径方便后续处理 # 获取目录下所有.xml文件的完整路径 xml_file_list = glob(os.path.join(dir_xml, "*.xml")) for xml_path in xml_file_list: # 读取单个XML文件内容 with open(xml_path, "r", encoding="utf-8") as f: content = f.read() # 直接read()比readlines()再join更高效 # 调用提取函数得到目标图片路径 target_picture_path = get_filename(content) # 这里可以后续添加图片复制逻辑
2. 根据路径字符串创建目录结构
要按picture_path的结构创建目录,需先拆分路径中的目录部分和文件名,再结合目标根目录,用os.makedirs()递归创建所有嵌套子目录,代码示例:
import os # 你的目标根目录 target_root = r"你的图片目标根目录绝对路径" # 示例路径字符串 picture_path = r"AB\C\D\E_F_G\H\I.jpg" # 拆分出目录部分和文件名 relative_dir, filename = os.path.split(picture_path) # 拼接完整的目标目录路径 full_target_dir = os.path.join(target_root, relative_dir) # 递归创建所有子目录,exist_ok=True避免目录已存在时报错 os.makedirs(full_target_dir, exist_ok=True) # 最终的图片完整存储路径 final_pic_path = os.path.join(full_target_dir, filename) # 之后可以用shutil.copy()等方法将源图片复制到这个路径
内容的提问来源于stack exchange,提问作者maggTech
相关产品推荐
相关产品推荐

