如何批量处理文件夹中的docx文件,提取表格并生成对应csv文件?
批量处理DOCX文件提取表格并导出CSV
你完全可以通过编写函数实现批量处理,以下是完整的实现代码,整合你已有的逻辑并适配批量场景:
import os from docx import Document import pandas as pd def batch_docx_to_csv(source_dir, output_dir=None): # 如果未指定输出目录,默认和源文件同目录 if output_dir is None: output_dir = source_dir # 创建输出目录(如果不存在) os.makedirs(output_dir, exist_ok=True) # 遍历源目录下的所有文件 for filename in os.listdir(source_dir): # 只处理docx文件 if filename.lower().endswith('.docx'): # 构建完整的文件路径 docx_path = os.path.join(source_dir, filename) try: # 读取docx文件并提取第一个表格 doc = Document(docx_path) if not doc.tables: print(f"警告:{filename} 中未找到表格,跳过") continue # 提取表格数据 table_data = [[cell.text for cell in row.cells] for row in doc.tables[0].rows] # 转换为DataFrame df = pd.DataFrame(table_data) # 生成CSV文件名(替换docx后缀为csv) csv_filename = os.path.splitext(filename)[0] + '.csv' csv_path = os.path.join(output_dir, csv_filename) # 导出为CSV df.to_csv(csv_path, index=False, encoding='utf-8-sig') print(f"已处理:{filename} -> {csv_filename}") except Exception as e: print(f"处理{filename}时出错:{str(e)}") # 示例调用 source_path = "/Users/cristobalmino/Desktop/3_ENTREGA DE TURNOS MEDICA/Entrega Turno UCI/2022/1. Enero 2022/" # 如果想把CSV输出到单独目录,比如创建一个csv_output文件夹 # output_path = os.path.join(source_path, "csv_output") # batch_docx_to_csv(source_path, output_path) # 不指定输出目录则默认存在源文件同目录 batch_docx_to_csv(source_path)
关键说明:
- 路径处理:用
os.path.join拼接路径,避免因操作系统差异导致的路径错误 - 文件过滤:通过
.lower().endswith('.docx')确保只处理DOCX文件,忽略大小写和其他格式文件 - 异常处理:加入
try-except捕获读取或转换过程中的错误,避免单个文件问题导致整个批量任务中断 - 输出灵活:可指定单独的输出目录,也可默认和源文件同目录
- 容错处理:检查文件中是否存在表格,避免无表格文件引发报错
内容的提问来源于stack exchange,提问作者Cristóbal Miño Morales
相关产品推荐
相关产品推荐

