繁体   English   中英

如何将字典写入已经存在且已包含标题的csv文件?

[英]How to write dictionary to csv file that already exists and already contains headers?

我对python还是很陌生,所以请原谅我的无知。 我有一个CSV文件,它已经在第一行中包含标题: column_1column_2column_3 我有一本字典,将各列的名称映射到它们各自的整数,我想将此字典写到CSV文件中,而整数将出现在下一行中。 但是,像column_3一样, 1继续追加到column_3 column_31 ,而23出现在column_3旁边的两个单元格中。

bigdict = {'column_1':1,'column_2':2,'column_3':3}

f = path

with open(f,'a+') as csv_file:
    fieldnames = ['column_1','column_2','column_3']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames,delimiter=',')
    csv_file.readline()
    writer.writerow(bigdict)

我之前已经编写了文本文件,已经阅读了CSV文件,并且还“打开”了不存在的CSV文件并为它们编写了字典,但是由于某些原因,将字典编写到现有CSV文件中却使我不胜其烦。

上面,我没有创建标题,因为它们已经存在。 我编写了csv_file.readline()以便脚本可以读取第二行,而不是稍后将字典写入第一行。 由于某种原因,当我最终调用.writerow ,它正在写附加在第一行末尾的字典值,如上所述。

我在这里做错了什么?

我按照下面的Rakesh的方法进行操作,但出现以下错误:

Traceback (most recent call last):

  File "<ipython-input-30-a0a3cb0b4ddd>", line 1, in <module>
    runfile('/Users/[name]/Documents/webscraper/tests/dictwritetoexistingcsv.py', wdir='/Users/[name]/Documents/webscraper/tests')

  File "/Users/[name]/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 866, in runfile
execfile(filename, namespace)

  File "/Users/[name]/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/[name]/Documents/webscraper/tests/dictwritetoexistingcsv.py", line 13, in <module>
writer.writerow(bigdict)

  File "/Users/[name]/anaconda/lib/python3.6/csv.py", line 155, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))

TypeError: a bytes-like object is required, not 'str'

希望我正确理解了您的问题,我认为问题是您的csv文件在最后一行的末尾没有换行符。 因此,在进行下一步并添加新行之前,我将首先进行检查。

我从这个名为bigcsv.csv简单csv文件开始,该文件与脚本位于同一目录中。 最初的内容是:

column_1,column_2,column_3
a, b, c

这是代码:

import os
import csv

dir_path = os.getcwd()
file_path = os.path.join(dir_path, "bigcsv.csv")


bigdict = {'column_1': 1, 'column_2': 2, 'column_3': 3}

with open(file_path, 'a+') as csv_file:
    fieldnames = ['column_1', 'column_2', 'column_3']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter=',')
    if '\n' not in csv_file.readlines()[-1]:
        csv_file.write("\n")
    writer.writerow(bigdict)

这是运行脚本后的文件。

column_1,column_2,column_3
a, b, c
1,2,3

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM