Python读取Word表单提取路径并创建目录时遇缩进错误
问题解决:提取Word表单路径并创建目录的错误修复
1. 核心报错修复:缩进错误
原代码的IndentationError是因为函数定义、变量声明及模块导入存在不必要的缩进。Python对代码层级的缩进要求严格,需将这些代码调整到全局层级(无额外缩进)。
2. 文本提取逻辑修正
原循环中每次迭代会覆盖cell_text,最终仅保留最后一个单元格内容。需将所有单元格文本拼接,确保包含目标段落的完整内容。
3. 路径提取与目录创建逻辑优化
提取到的路径是单个字符串,无需循环遍历;同时需处理路径中的转义字符,添加目录存在检查避免创建报错。
修正后的完整代码
import docx import os def between(value, a, b): # 查找目标字符串的位置 pos_a = value.find(a) if pos_a == -1: return "" pos_b = value.rfind(b) if pos_b == -1: return "" # 计算提取范围 adjusted_pos_a = pos_a + len(a) if adjusted_pos_a >= pos_b: return "" # 提取并去除首尾空白(包括换行符) return value[adjusted_pos_a:pos_b].strip() # 读取Word文档 path = 'C:/new/form.docx' doc = docx.Document(path) table = doc.tables[1] # 拼接所有单元格的文本,确保包含目标内容 full_text = "" for row in table.rows: for cell in row.cells: full_text += cell.text + "\n" # 提取目标路径 target_path = between(full_text, "Data Source (Only)", "Working Folders") print(f"提取到的路径: {target_path}") # 创建目录 root_path = 'C:/new' if target_path: # 拼接完整的目录路径(提取目标路径的最后一级作为子目录名) dir_name = os.path.basename(target_path) dir_path = os.path.join(root_path, dir_name) # 检查目录是否已存在,不存在则创建 if not os.path.exists(dir_path): os.mkdir(dir_path) print(f"目录 {dir_path} 创建成功") else: print(f"目录 {dir_path} 已存在") else: print("未找到目标路径")
关键修改说明
- 将
import os移至顶部,符合Python导入规范 - 修正
between函数的缩进,调整为全局层级定义 - 用
full_text拼接所有单元格内容,确保匹配跨行的目标文本 - 提取路径后去除首尾空白,避免换行符或空格干扰
- 添加目录存在检查,防止
os.mkdir因目录已存在报错 - 优化目录拼接逻辑,从目标路径中提取子目录名进行创建
内容的提问来源于stack exchange,提问作者Elif Y
相关产品推荐
相关产品推荐

