如何让python在添加行时停止在csv文件中跳过行

时间:2015-03-23 12:48:06

标签: python csv

我有一个代码,当我运行它时,它会向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})

2 个答案:

答案 0 :(得分:0)

我认为您在每个writer.writeheaderif条件中错过了elif

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

答案 1 :(得分:0)

每次打电话时,

假设你都在Python 3 中):

with open('mycsv.csv', 'a') as csvfile:

如果您使用的是Windows计算机,请尝试:

with open('mycsv.csv', 'a', newline='') as csvfile:

编辑:解释/澄清

Per Python' documentation on csv writer

  

如果csvfile是一个文件对象[意思是,如果传递给csv writer的文件名为csvfile],则应该使用newline ='' ...

     

如果换行=''未指定,新行嵌入在引用字段中   将无法正确解释,并在平台[如Windows]   在写一个额外的\ r \ n时使用\ r \ n linendings将被添加。这应该   指定newline =''总是安全的,因为csv模块会执行它   自己(通用)换行处理。

正如martineau指出的那样,你可以通过以字节模式(' ab'或' wb')写入文件来避免Python 2中的这个问题。 Python 3的csv模块喜欢使用字符串,而不是字节。因此,它应该以文本模式打开(' w'或者' a')。