读取多工作表Excel时触发AttributeError:对象无'tolist'属性
问题解决:多工作表读取时的AttributeError错误
错误原因
当使用pd.read_excel(f, sheet_name=None)读取Excel文件时,返回的不是单个DataFrame,而是字典结构——键为工作表名称,值为对应工作表的DataFrame。此时df.values调用的是字典的内置方法values()(而非DataFrame的values属性),直接给它加.tolist()会触发错误,因为方法本身没有这个属性。
另外原代码存在缩进错误:df=pd.read_excel(f, sheet_name=None)没有缩进在for f in files:循环内,这会导致逻辑执行错误。
修正后的代码
import os import glob import pandas as pd import re # 假设已定义邮箱匹配正则,示例:regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b' path = os.getcwd() files = glob.glob(os.path.join(path,"*.xlsx")) df_email = pd.DataFrame() for f in files: # 读取所有工作表,得到{工作表名: DataFrame}的字典 sheet_dict = pd.read_excel(f, sheet_name=None) # 遍历每个工作表的DataFrame for sheet_df in sheet_dict.values(): # 遍历工作表的每一行 for row in sheet_df.values.tolist(): for col in row: matches = re.findall(regex, str(col)) if matches: df_email = df_email.append([matches[0]], ignore_index=True)
关键修改点
- 将返回的工作表集合重命名为
sheet_dict,明确其字典类型 - 新增循环遍历
sheet_dict.values(),逐个处理每个工作表的DataFrame - 修正缩进问题,确保文件遍历逻辑正确执行
- 针对单个工作表的DataFrame调用
values.tolist(),这是正确的用法
内容的提问来源于stack exchange,提问作者Rushi
相关产品推荐
相关产品推荐

