9

我现在正在使用 csv 包,每次写入新的 csv 文件并用 excel 打开它时,我都会在每两行之间找到一个空行。

filereader = csv.reader(open("tests.csv", "r"), delimiter=",")
filewriter = csv.writer(open("test_step1.csv", "w"), delimiter=",")
#Delete header
for row in filereader:
    if row[0].isdigit():
        filewriter.writerow(row)

在此处输入图像描述

4

4 回答 4

7

您需要以 wb 模式打开文件尝试:

import csv

filereader = csv.reader(open("tests.csv", "r"), delimiter=",")
filewriter = csv.writer(open("test_step1.csv", "wb"), delimiter=",", newline="")
#Delete header
for row in filereader:
    if row[0].isdigit():
        filewriter.writerow(row)

csv.writer 直接将\r\n写入文件。

如果您不以二进制模式打开文件,它将写入\r\r\n因为在 Windows 文本模式下会将每个\n转换为\r\n

编辑:

对于 python 3,必须按照这个答案newline=""添加到csv.writer

于 2013-05-31T19:46:30.647 回答
2

我正在使用Python 3.6,似乎

csv.writer(open("test_step1.csv", "wb"), delimiter=",", newline="")

是不正确的。而是newline=""应该在open()子句中添加。

于 2017-11-29T04:42:07.337 回答
1

请注意 Windows 中的 csv 1.0(需要 '\n')和 MAC OS(可选)。下面的代码将输出 .csv 文件,下一行之间没有空格。它适用于 MAC 和 Windows。

import csv
for i in range (5):
    MyList=[]
    MyList.append(i)
    cnword=0
    with open('test_step1.csv', 'a') as f:
        for item in MyList:
            if cnword != len(MyList)-1:
                f.write("%s," % item)
            else:
                f.write("%s" % item)
            cnword+=1

        f.write("\n" )  
    myList=[]
于 2019-07-18T15:13:01.343 回答
0

只需在打开文件的位置添加 newline='' 即可。这个对我有用。例如,csvFileName = open('file.csv', 'w', newline= '')

于 2022-01-31T11:16:36.950 回答