如何用Python在指定目录的.imageAssets子目录中执行命令?
批量处理.imageAssets目录中的PDF文件及元数据修改
需求说明
遍历指定根目录下的所有子目录,仅对后缀为.imageAssets的目录执行以下操作:
- 将目录内的PDF文件转换为目标图片格式(如PNG)
- 修改对应
.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')
关键说明
- 依赖工具:脚本使用ImageMagick的
convert命令处理PDF转换,需先安装:- Ubuntu/Debian:
sudo apt install imagemagick - macOS:
brew install imagemagick - Windows:下载官方安装包并配置环境变量
- Ubuntu/Debian:
- 权限问题:若
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" /> - 自定义调整:
- 若需用其他PDF转换工具(如
pdf2image库),可替换subprocess.run部分的代码 - 若元数据文件为JSON/XML等结构化格式,需调整扩展名替换逻辑(如用正则精准匹配文件名部分)
- 若需用其他PDF转换工具(如
- 安全提示:运行脚本前建议备份目标目录,避免意外数据丢失
内容的提问来源于stack exchange,提问作者MichaelGofron
相关产品推荐
相关产品推荐

