如何将循环读取文件夹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
相关产品推荐
相关产品推荐

