python - 如何将字典写入已存在且已包含标题的 csv 文件?
问题描述
我对python还是有点陌生,所以请原谅我的无知。我有一个 CSV 文件,它已经包含了第一行中的标题:column_1
、column_2
和column_3
. 我有一个字典,将列名映射到它们各自的整数,我想把这个字典写在 CSV 文件中,整数出现在下一行。但是,1
不断在 的末尾附加column_3
,如column_31
和 ,2
并且3
出现在 旁边的两个单元格中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 文件在最后一行的末尾没有换行符。所以,我会在继续添加新行之前先检查一下。
我从这个简单的 csv 文件开始,bigcsv.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
希望能帮助到你。
推荐阅读
- csv - Jmeter JSR223 采样器 - 无法将数据写入 CSV 文件
- vba - Excel VBA UDF finding maximum spread between two assigned values and two ranges
- intellij-idea - 以编程方式将单元测试结果从 xml 导入 IntelliJ 中的 Junit 视图
- c++ - Iterate std::vector without using vector.end()
- r - GLM 中所有虚拟因子变量的系数
- angular - 如何在 PrimeNg 中获取没有掩码字符的值?
- javascript - 在 Protractor 中以私有模式启动 IE
- bash - grep 不能很好地搜索双引号。甚至没有\"
- java - 使用 JMS 代理重新启动服务器后如何恢复 JMS 连接
- git - 如果没有删除行,git apply 可以应用多次