添加行时如何使python停止跳过csv文件中的行[重复]
Posted
技术标签:
【中文标题】添加行时如何使python停止跳过csv文件中的行[重复]【英文标题】:How to make python stop skipping lines in csv file when adding lines [duplicate] 【发布时间】:2015-05-26 11:11:02 【问题描述】:我有一个代码,当我运行它时,它会向 csv 文件添加信息,但每次添加新内容时都会跳过一行。如何阻止它?
import csv
if group == '1':
with open('class1.csv', 'a') as csvfile:
fieldnames = ['Forename', 'Surname', 'Score']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow('Forename': name, 'Surname': name1, 'Score':score)
elif group == '2':
with open('group1.csv', 'a') as csvfile:
fieldnames = ['Forename', 'Surname', 'Score']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow('Forename': name, 'Surname': name1, 'Score':score)
elif group == '3':
with open('class3.csv', 'a') as csvfile:
fieldnames = ['Forename', 'Surname', 'Score']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow('Forename': name, 'Surname': name1, 'Score':score)
【问题讨论】:
跳过一行是什么意思? 当它将信息存储在 excel 文件中时,它会水平存储名称和分数(在一行中),但在存储下一组数据之前它会丢失另一行。 你的意思是它添加了一个空行? 您使用的是什么操作系统和 Python 版本? 【参考方案1】:我认为您在每个if
和elif
条件下都错过了writer.writeheader
if group == '1':
with open('class1.csv', 'a') as csvfile:
fieldnames = ['Forename', 'Surname', 'Score']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader() #you missed it
writer.writerow('Forename': 'name', 'Surname': 'name1', 'Score':'score')
#rest of code
【讨论】:
当 追加 到现有的 csv 文件时,您通常不想写标题,因为大概已经有一个。【参考方案2】:(假设您使用的是 Python 3),每次调用时:
with open('mycsv.csv', 'a') as csvfile:
如果您使用的是 Windows 机器,请尝试:
with open('mycsv.csv', 'a', newline='') as csvfile:
编辑:解释/澄清
根据 Python 的documentation on csv writer,
如果 csvfile 是一个文件对象 [意思是,如果您传递给 csv writer 的文件称为 csvfile],则应使用 newline='' 打开它...
如果未指定 newline='',则在带引号的字段中嵌入换行符 将无法正确解释,并且在平台 [例如 Windows] 上 在写入时使用 \r\n 衬里会添加额外的 \r。这应该 始终可以安全地指定 newline='',因为 csv 模块会执行 自己的(通用)换行处理。
正如 martineau 所指出的,您可以在 Python 2 中通过以字节模式('ab' 或 'wb')写入文件来避免此问题。 Python 3 的 csv 模块喜欢使用字符串,而不是字节。因此,它应该以文本模式打开(“w”或“a”)。
【讨论】:
对于 Python 2 使用with open('mycsv.csv', 'ab') as csvfile:
。如果您编辑它并解释导致问题的原因,我会支持您的答案。以上是关于添加行时如何使python停止跳过csv文件中的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章