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

读取多工作表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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:20:36