【问题标题】:Python csv.DictWriter writerow() returns errorPython csv.DictWriter writerow() 返回错误
【发布时间】:2015-09-26 18:42:09
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您缺少[csv.DictWriter](https://docs.python.org/2/library/csv.html#csv.DictWriter) 的强制参数fieldnames

    fieldnames 参数是一个键序列,用于标识传递给 writerow() 方法的字典中的值写入 csvfile 的顺序。

    请注意,与 DictReader 类不同,DictWriter 的 fieldnames 参数不是可选的。由于 Python 的 dict 对象没有排序,因此没有足够的信息来推断该行应写入 csvfile 的顺序。

    完整的签名是:

    class csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
    

    文档示例:

    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'})
    

    【讨论】:

    • 谢谢!那解决了它。我错过了它说 not optional 的部分。
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2016-01-06
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多