如何扩展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
相关产品推荐
相关产品推荐

