我正在尝试使用Python的csv包来操作csv文件。我想打开csv文件,操纵它(从某些人工制品中清除它),将更改写入另一个文件,完成。
我在写作部分遇到了麻烦。我不确定我是否正确使用了csv.DictWriter。我的代码的最后一行产生错误:
TypeError: init ()至少需要3个参数(给定2个)
为什么我收到此错误?
import csv
dataSource = 'dentistData.csv'
dataTarget = 'test.csv'
with open(dataSource) as source, open(dataTarget) as target:
reader = csv.DictReader(source, delimiter=",", quotechar='"')
writer = csv.DictWriter(target, delimiter=',')
for row in reader:
#if dentist_type is empty, add the type PRV (private dentist)
if not row['dentist_type']:
row['dentist_type']='PRV'
print(row['dentist_type'])
#remove lgh from street field
writer.writerow(row)
答案 0 :(得分:2)
您缺少fieldnames
的必填参数[csv.DictWriter](https://docs.python.org/2/library/csv.html#csv.DictWriter)
。
fieldnames参数是一系列键,用于标识传递给writerow()方法的字典中的值被写入csvfile的顺序。
请注意,与DictReader类不同,DictWriter的fieldnames参数不是可选的。由于Python的dict对象没有排序,因此没有足够的信息来推断应该将行写入csvfile的顺序。
完整的签名是:
class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
doc:
中的示例import csv
with open('names.csv', 'w') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})