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

如何扩展Python脚本,基于Word文档版本信息实现嵌套文件归类?

实现方案与修改后的脚本

核心实现方向

  • 遍历主目录下所有已创建的同名子文件夹
  • 在每个子文件夹中定位对应的Word文档
  • 读取文档第7段文本(doc.paragraphs[6],索引从0开始),从中提取版本号(从Version Number: X.X格式中剥离出X.X)
  • 在当前子文件夹内创建以版本号命名的新子文件夹
  • 将Word文档移动到这个版本子文件夹中

修改后的完整脚本

#!/usr/bin/env python3

import glob, os, shutil, docx, sys
import re

def extract_version(paragraph_text):
    # 用正则匹配版本号格式,适配X.X的情况
    match = re.search(r'Version Number: (\d+\.\d+)', paragraph_text)
    if match:
        return match.group(1)
    return None

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python3 script.py <主文件夹路径>")
        sys.exit(1)
    
    folder = sys.argv[1]
    
    # 遍历主文件夹下的所有子文件夹
    for sub_dir in glob.glob(os.path.join(folder, '*')):
        if not os.path.isdir(sub_dir):
            continue  # 跳过非文件夹的文件
        
        # 查找子文件夹里的docx文件
        doc_files = glob.glob(os.path.join(sub_dir, '*.docx'))
        if not doc_files:
            print(f"警告:子文件夹 {sub_dir} 中未找到docx文件")
            continue
        
        for doc_path in doc_files:
            try:
                # 打开Word文档提取版本号
                doc = docx.Document(doc_path)
                if len(doc.paragraphs) <= 6:
                    print(f"警告:文档 {doc_path} 段落不足7段,无法提取版本号")
                    continue
                
                para_text = doc.paragraphs[6].text.strip()
                version = extract_version(para_text)
                if not version:
                    print(f"警告:无法从文档 {doc_path} 的第7段提取版本号")
                    continue
                
                # 创建版本号子文件夹
                version_dir = os.path.join(sub_dir, version)
                os.makedirs(version_dir, exist_ok=True)
                
                # 移动文档到版本子文件夹
                target_path = os.path.join(version_dir, os.path.basename(doc_path))
                shutil.move(doc_path, target_path)
                print(f"已处理:{doc_path} -> {target_path}")
            
            except Exception as e:
                print(f"处理文档 {doc_path} 时出错: {str(e)}")

关键部分说明

  • 版本号提取:用正则表达式r'Version Number: (\d+\.\d+)'精准匹配格式,确保能可靠提取X.X形式的版本号,比单纯字符串分割更稳定
  • 容错处理:添加了段落数量检查、版本号匹配失败、文件夹已存在等场景的处理,避免脚本中途崩溃
  • 遍历逻辑:先遍历主目录下的子文件夹,再在每个子文件夹内找docx文件,符合当前已有的文件夹结构
  • 异常捕获:用try-except包裹文档处理流程,单个文档出错不会影响整体批量处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:45:33