Python:csv.writerow()按字符分割关键字符?

时间:2015-06-26 17:05:58

标签: python python-2.7 csv

假设:

import csv
def writeToCsv(rows):
    with open('results.csv', 'w') as csvfile:
        fieldnames = ['Name', '#Reviews', 'Address', 'Phone']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        writer.writeheader()
        for row in rows:
            writer.writerow(row)

当我尝试:

row = {
    'Name': self.validEntries.keys()[0],
    '#Reviews': self.validEntries.values()[0],
    'Address': (nap[0] + ', ' + nap[1]),
    'Phone': nap[2]
}
writeToCsv(row)

我明白了:

ValueError: dict contains field not in fieldnames: 'P', 'h', 'o', 'n', 'e'

为什么writerow逐个字符地分割这个字段(我想它会对每个字段做同样的事情)?

2 个答案:

答案 0 :(得分:2)

您应该将dictionary传递给writer.writerow,而不是将每个key单独传递到写行中。

另外,如果你想将多行(意思是多个词典的列表)一起写入csv,你可以使用 - writer.writerows(rows)将diciontaries列表传递给它。

示例 -

import csv
with open('results.csv', 'w') as csvfile:
    fieldnames = ['Name', '#Reviews', 'Address', 'Phone']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    row = {'Name':'Blah','#Reviews':'Blah','Address':'Blah','Phone':'Blah'}
    writer.writeheader()
    writer.writerow(row)
    rows = [{'Name':'Blah2','#Reviews':'Blah2','Address':'Blah2','Phone':'Blah2'},{'Name':'Blah1','#Reviews':'Blah1','Address':'Blah1','Phone':'Blah1'}]
    writer.writerows(rows)

此后results.csv看起来像 -

Name,#Reviews,Address,Phone
Blah,Blah,Blah,Blah
Blah2,Blah2,Blah2,Blah2
Blah1,Blah1,Blah1,Blah1

在您的情况下,您需要使用writer.writerow(rows)而不循环遍历行。

或者您也可以将行列表作为writeToCsv([row])发送,但是您仍然不需要遍历行,您应该使用writer.writerows()将行写入字典。 (注意额外的s

答案 1 :(得分:1)

我认为您必须将代码更改为:

row = {'Name': self.validEntries.keys()[0], '#Reviews' : self.validEntries.values()[0], 'Address' : (nap[0] + ', ' + nap[1]), 'Phone': nap[2]}
writeToCsv([row])

你的writeToCsv期待列表不是dict。