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

如何用Python在指定目录的.imageAssets子目录中执行命令?

批量处理.imageAssets目录中的PDF文件及元数据修改

需求说明

遍历指定根目录下的所有子目录,仅对后缀为.imageAssets的目录执行以下操作:

  1. 将目录内的PDF文件转换为目标图片格式(如PNG)
  2. 修改对应.metadata文件中的扩展名(将.pdf替换为目标格式后缀)

解决方案:用os.walk实现无递归函数的遍历

os.walk本身就是递归遍历目录的工具,完全不需要额外写递归函数,这是最简便的实现方式。以下是完整Python脚本:

import os
import subprocess

def process_image_assets(root_dir, target_format='png'):
    # 遍历根目录下所有层级的目录和文件
    for current_path, _, files in os.walk(root_dir):
        # 筛选出后缀为.imageAssets的目录
        dir_name = os.path.basename(current_path)
        if dir_name.endswith('.imageAssets'):
            for file in files:
                # 处理目录中的PDF文件
                if file.endswith('.pdf'):
                    base_name = os.path.splitext(file)[0]
                    pdf_full_path = os.path.join(current_path, file)
                    target_full_path = os.path.join(current_path, f"{base_name}.{target_format}")
                    
                    # 调用ImageMagick的convert命令转换PDF
                    try:
                        subprocess.run(
                            ['convert', pdf_full_path, target_full_path],
                            check=True,
                            capture_output=True,
                            text=True
                        )
                        print(f"✅ 转换完成: {pdf_full_path} → {target_full_path}")
                    except subprocess.CalledProcessError as e:
                        print(f"❌ 转换失败 {pdf_full_path}: {e.stderr}")
                        continue
                    
                    # 更新对应的.metadata文件
                    metadata_path = os.path.join(current_path, f"{base_name}.metadata")
                    if os.path.exists(metadata_path):
                        with open(metadata_path, 'r') as f:
                            content = f.read()
                        # 替换扩展名(如果元数据有特殊格式,可调整为正则匹配)
                        updated_content = content.replace('.pdf', f'.{target_format}')
                        with open(metadata_path, 'w') as f:
                            f.write(updated_content)
                        print(f"🔄 更新元数据: {metadata_path}")

if __name__ == '__main__':
    # 替换为你的根目录实际路径
    ROOT_DIR = "/path/to/your/Dir1"
    # 可指定目标格式,如'jpg'、'webp'等
    process_image_assets(ROOT_DIR, target_format='png')

关键说明

  1. 依赖工具:脚本使用ImageMagick的convert命令处理PDF转换,需先安装:
    • Ubuntu/Debian:sudo apt install imagemagick
    • macOS:brew install imagemagick
    • Windows:下载官方安装包并配置环境变量
  2. 权限问题:若convert命令报错"not authorized",需修改ImageMagick的策略文件(如Ubuntu的/etc/ImageMagick-6/policy.xml),将<policy domain="coder" rights="none" pattern="PDF" />改为<policy domain="coder" rights="read|write" pattern="PDF" />
  3. 自定义调整:
    • 若需用其他PDF转换工具(如pdf2image库),可替换subprocess.run部分的代码
    • 若元数据文件为JSON/XML等结构化格式,需调整扩展名替换逻辑(如用正则精准匹配文件名部分)
  4. 安全提示:运行脚本前建议备份目标目录,避免意外数据丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:34:58