如何在Python中向csv文件添加标题?

12

我尝试了很多方法来给我的CSV文件添加标题,但是都没有正常工作。以下是我尝试的几种方法:

  1. 我使用了writerow方法,但是我的数据覆盖了第一行。

  2. 我使用了DictWriter方法,但是我不知道如何正确填写它。以下是我的代码:

    csv = csv.DictWriter(open(directory +'/csv.csv', 'wt'), fieldnames = ["stuff1", "stuff2", "stuff3"], delimiter = ';')
    csv.writeheader(["stuff1", "stuff2", "stuff3"])
    
    我遇到了"传递的参数数量为2而不是1"的错误,但我真的不知道为什么。
    有什么建议吗?

2个回答

25

你所需要做的就是调用 DictWriter.writeheader() 方法,不需要传递任何参数:

with open(os.path.join(directory, 'csv.csv'), 'wb') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames = ["stuff1", "stuff2", "stuff3"], delimiter = ';')
    writer.writeheader()

你已经告诉了DictWriter()你的标题是什么。


1
嗯,t 是一个有效的 open 模式吗? - Jon Clements
@JonClements:我没注意到模式,只是从原帖中复制过来。已经纠正了。 - Martijn Pieters
2
类型错误:'fieldnames' 是该函数的无效关键字参数,我正在使用 Python 2.6,PyQt4.7。你能帮忙吗? - Aleksandar
1
@Aleksandar:fieldnames是仅适用于csv.DictWriter()csv.DictReader()类的关键字参数。确保您不要将其与csv.writer()csv.reader()混淆。如果使用正确,Python 2.6可以很好地支持它。 - Martijn Pieters
@MartijnPieters 好的,谢谢。我已经按照你的回答尝试了一下,但是出现了“AttributeError: DictWriter实例没有'writeheader'属性”的错误。 - Aleksandar
5
@Aleksandar:没错,Python 2.6不支持那个方法。该方法在Python 2.7中添加。您可以使用writer.writerow(dict(zip(writer.fieldnames, writer.fieldnames)))来模拟它。 - Martijn Pieters

2

在编写CSV文件时,我遇到了类似的问题。我需要读取csv文件并修改其中的一些字段。为了在CSV文件中写入标题,我使用了以下代码:

reader = csv.DictReader(open(infile))
headers = reader.fieldnames

with open('ChartData.csv', 'wb') as outcsv:
    writer1 = csv.writer(outcsv)
    writer1.writerow(headers)

当您编写数据行时,可以按照以下方式使用DictWriter

writer = csv.DictWriter(open("ChartData.csv", 'a' ), headers)

在上述代码中,"a" 代表 追加。总之,当你在同一文件中写入标题后,请使用 a 来将数据附加到 csv 中。

1
为什么要先创建一个单独的 csv.writer(),然后再用 csv.DictWriter() 打开同一个文件进行追加?只需使用 writer = csv.DictWriter(outcsv, fieldnames=headers),然后 writer.writeheader() 即可。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接