使用boto3与Python处理AWS API数据转CSV时遇write方法报错求助
解决csv writer()的"argument 1 must have a 'write' method"错误
这个错误其实很常见——你肯定是给csv.writer()传了一个没有write方法的对象,最典型的情况就是直接传了文件名字符串,而不是打开的文件对象。咱们一步步理清楚:
错误原因拆解
csv.writer()的第一个参数必须是一个实现了write()方法的可写流对象(比如用open()打开的文件句柄)。如果你传的是字符串(比如'output.csv'),或者只读模式打开的文件,甚至是其他非文件对象,就会触发这个错误。
结合你的场景的正确写法
假设你已经把AWS API返回的JSON写入了response.json文件,现在要转CSV,正确的流程应该是这样的:
1. 先读取JSON数据
import json import csv # 读取JSON文件 with open('response.json', 'r') as json_file: data = json.load(json_file)
2. 正确初始化csv.writer
这里要注意,必须用可写模式打开CSV文件,然后把文件对象传给csv.writer():
# 错误写法(会触发你的错误):直接传文件名 # writer = csv.writer('output.csv') ❌ # 正确写法:传打开的文件对象 with open('output.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) ✅ # 如果你的JSON是字典列表,先写表头 if data and isinstance(data[0], dict): writer.writerow(data[0].keys()) # 再写每行数据 for item in data: writer.writerow(item.values()) # 如果是简单的列表列表,直接写入 else: writer.writerows(data)
其他可能的坑
- 如果你之前打开CSV文件用了
'r'模式(只读),那文件对象没有write方法,也会报错,一定要用'w'或'a'(追加)模式。 - 别忘了加
newline=''参数,这能避免Windows系统下CSV出现多余的空行。 - 如果你的JSON结构嵌套比较深,可能需要先扁平化数据再写入CSV,不然直接写values会得到嵌套的列表,CSV格式会乱。
举个错误示例对比:
# 错误示例:传文件名而不是文件对象 csv.writer('output.csv') # 触发"argument 1 must have a 'write' method"
把这个改成用open()打开的文件对象就解决了。
内容的提问来源于stack exchange,提问作者dmn0972
相关产品推荐
相关产品推荐

