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

批量读取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:05:30