添加行时如何使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】:

我认为您在每个ifelif 条件下都错过了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文件中的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何让pandas停止跳过TSV文件中的第一个空白列?

将 CSV 文件中的行跳过到某个单词 C#

Python Pandas read_csv 跳过行但保留标题

在读取 Python 文件中的行时跳过前几行

在 csv 导入 pandas 期间跳过行

如何跳过或忽略标题上方的行?