如何将多个docx文件内容分别存入DataFrame不同列并导出Excel?
问题原因
- 每次遍历docx文件时,都单独创建了仅包含当前docx内容的单列DataFrame,且每次都调用
to_excel()覆写同一个输出文件,之前生成的列自然会被覆盖 pd.DataFrame()和df_last.to_excel()的代码位置错误,被放在了遍历文档段落的内层循环中,每读一个段落就会重新生成DF、覆写一次文件,逻辑完全错误- 没有设计多列合并的逻辑,所有列的内容没有汇总到同一个DataFrame中
修正后代码
import os import pandas as pd from docx import Document def get_files(extension, location): v_doc = [] for root, dirs, files in os.walk(location): for t in files: if t.endswith(extension): # 拼接绝对路径,避免Document找不到目标文件 v_doc.append(os.path.join(root, t)) return v_doc # 提前创建空DataFrame,用来汇总所有列内容 df_all = pd.DataFrame() file_list = get_files('.docx', paths) for index, file in enumerate(file_list, start=1): doc = Document(file) # 直接提取非空段落文本,简化中间变量 new = [f.text for f in doc.paragraphs if f.text.strip()] column_label = f'column{index}' # 把当前列追加到总DF中,两列长度不一致的位置会自动填充NaN df_all[column_label] = pd.Series(new) # 全部文件处理完成后统一导出Excel df_all.to_excel('output_dummy.xlsx', index=False)
核心修改说明
- 提前初始化全局空DataFrame
df_all,所有docx的内容都作为新列追加到该DF中,实现多列共存 - 将DF生成、导出逻辑移到循环最外层,避免多次覆写输出文件
- 优化了段落提取的写法,减少冗余中间变量
- 修复了原代码仅存储文件名、不拼接绝对路径的隐患,避免跨目录读取文件时报错
- 用
enumerate替代手动计数的index变量,逻辑更简洁 - 导出时添加
index=False参数,避免输出多余的行索引列
内容的提问来源于stack exchange,提问作者Titan
相关产品推荐
相关产品推荐

