类型错误:参数1必须具有“write”方法

2024-05-22 22:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我手头的问题是从API获取数据并将数据输入csv。我可以得到数据,但是将数据输出到csv中是我得到错误的地方。有人能帮忙吗。

下面是示例代码:

import csv,sys  
def read_campaign_info(campaigns):
   myfile = csv.writer(open("output.csv", "w")) 
   for insight in reach_insights:
            account_id = str(insight[AdsInsights.Field.account_id])
            objective = str(insight[AdsInsights.Field.objective])
            metrics =[account_id,objective]
            wr = csv.writer(myfile,quoting=csv.QUOTE_ALL)
            wr.writerows(metrics)

变量类型metrics<class 'list'>

我得到的错误是

wr = csv.writer(myfile,quoting=csv.QUOTE_ALL)
TypeError: argument 1 must have a "write" method

Tags: csv数据idfield错误accountwrmyfile
1条回答
网友
1楼 · 发布于 2024-05-22 22:20:19

您正在将csv.writer()对象传递给csv.writer()

myfile = csv.writer(open("output.csv", "w")) 
wr = csv.writer(myfile,quoting=csv.QUOTE_ALL)

myfile是一个csv.writer()对象已经。将行传递给该行,或者从myfile行中移除csv.writer()调用(但随后将wr = csv.writer(..)行移出循环,只需创建一次)。

我强烈建议您将文件对象用作上下文管理器,以便正确关闭它。另外,您希望将换行处理留给CSV模块,因此在打开文件时使用newline=''

with open("output.csv", "w", newline='') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    for insight in reach_insights:
        account_id = insight[AdsInsights.Field.account_id]
        objective = insight[AdsInsights.Field.objective]
        wr.writerow([account_id, objective])

csv.writer()对象为您处理到字符串的转换,因此str()调用是多余的。

相关问题 更多 >

    热门问题