python保存数据到Excel报错AttributeError: 'str' object has no attribute 'keys'
时间: 2025-05-17 11:26:12 AIGC 浏览: 53
在处理将数据保存到Excel文件的过程中,如果遇到`AttributeError: 'str' object has no attribute 'keys'`这样的错误,通常是因为传递给写入方法的数据结构不符合预期的要求。具体来说,在使用像 `openpyxl` 或 `pandas` 这样的库时,某些函数期望接收的是字典或其他具有 `.keys()` 方法的对象,而不是字符串。
以下是可能的原因以及解决方案:
### 错误原因分析
当尝试调用`.keys()`方法于一个字符串对象上时会引发此异常,因为字符串本身并不具备该属性[^1]。这表明传入的数据可能是未经适当转换的纯文本形式而非映射类型(如字典)。例如,如果你试图通过如下方式向Excel单元格赋值,则可能会触发上述错误:
```python
ws.append("example") # ws is an openpyxl.Worksheet instance.
```
这里 `"example"` 是一个字符串,而 `append` 函数期待列表或者可迭代对象来匹配列数并填充整行数据。
### 解决方案
#### 使用正确的数据结构
确保提供给Excel写入器的数据是以合适的形式存在的。如果是单个条目,应该将其包裹在一个列表里再提交;若是多字段记录则应采用字典或者其他支持键访问的方式表示。下面展示如何修正这个问题的例子:
##### 利用 pandas DataFrame 导出至 Excel 文件
Pandas 提供了一个非常方便的方法叫做 `to_excel()`, 它可以轻松地把表格型数据存放到 Microsoft Office 的电子表册当中去。假设我们有一个简单的名字年龄配对关系要存储下来:
```python
import pandas as pd
data = {'Name': ['John', 'Anna'], 'Age':[28, 22]}
df = pd.DataFrame(data)
# Save dataframe into excel file named "output.xlsx"
df.to_excel('output.xlsx')
```
在这个例子中,原始资料被组织成了一个字典型变量 `data` ,随后转化为 Pandas 数据框 (DataFrame),最后导出了目标文档。“Name” 和 “Age” 成为了两列的名字,对应数组中的元素自动分配到了相应的行列位置之上。
##### 如果坚持使用 OpenPyXl 库的话
那么就需要手动调整输入参数使之满足 API 要求。比如前面提到过的 append 方法实际上接受的是序列化后的项目集合,因此我们可以这样修改之前的代码片段:
```python
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
row_data = ["Example"] # Wrap string inside list.
for row in row_data:
ws.append(row) # Now correctly passes iterable instead of plain str.
wb.save("sample.xlsx")
```
以上两种途径都可以有效规避掉原本由于不恰当操作所引起的 AttributeError 异常状况发生。
### 总结
为了避免此类问题再次出现,请始终确认所提供的数据符合相应接口的需求规格说明,并且注意区分不同种类之间的差异特性以便合理运用它们完成既定任务。
阅读全文
相关推荐




















