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

如何将循环读取文件夹docx生成的多个DataFrame以对应文件名命名

问题解决方法

你代码中最后一行的写法不符合Python语法规则,赋值语句左侧不能直接使用字符串拼接表达式作为变量名,因此会触发语法错误。

实现方案(无需自定义字典存储)

可以通过操作Python全局命名空间的globals()内置字典实现动态变量名绑定,操作前需要先将源文件名处理为合法的Python变量名,避免文件名包含空格、特殊符号、以数字开头等不符合变量命名规则的情况导致报错。

修改后的完整代码如下:

import os
import re
import pandas as pd
from docx import Document

# 请自行替换为你的目标文件夹路径
directory = "你的文件夹路径"

for root, dirs, files in os.walk(directory):
     for document in files:
         if document.endswith('.docx'):
             table_num=4
             nheader=2
             joined_path = os.path.join(directory,document)
             document1 = Document(joined_path)
             table =document1.tables[table_num-1]
             data=[[cell.text for cell in row.cells] for row in table.rows]
             df = pd.DataFrame(data)
             outside_col,inside_col =df.iloc[0],df.iloc[1]
             hier_index =pd.MultiIndex.from_tuples(list(zip(outside_col,inside_col)))
             df=pd.DataFrame(data,columns=hier_index).drop(df.index[[0,1]]).reset_index(drop=True)
             df['company'] = os.path.basename(os.path.normpath(document))
             # 以下为动态变量赋值逻辑
             # 提取不含后缀的文件名
             raw_name = os.path.splitext(document)[0]
             # 替换文件名中的非法变量名字符为下划线
             valid_var_name = re.sub(r'[^0-9a-zA-Z_u4e00-u9fa5]', '_', raw_name)
             # 若文件名以数字开头,增加df_前缀保证变量名合法
             if valid_var_name[0].isdigit():
                 valid_var_name = f"df_{valid_var_name}"
             # 绑定到全局变量
             globals()[valid_var_name] = df

执行完成后即可直接通过和文件名对应的变量名访问对应DataFrame,例如源文件名为企业年报2023.docx,你可以直接调用企业年报2023获取对应的DataFrame对象。

内容的提问来源于stack exchange,提问作者coding-zero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:27:04