Пустое пространство между строками после использования Writer в Python

Сейчас я использую пакет 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)

введите описание изображения здесь

5 ответов

Решение

Вам нужно открыть файл в режиме 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.

редактировать:

Для питона 3 пришлось добавить newline="" csv.writer согласно этому ответу

Я использую Python 3.6 и кажется, что

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

не является правильным. Скорее, newline="" следует добавить в open() пункт.

Просто добавьте новую строку ='', где вы открываете файл. Меня устраивает. например, csvFileName = open('file.csv', 'w', новая строка='')

Обратите внимание, что csv 1.0 в Windows (требуется '\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=[]

Для тех, кто используетpandas.DataFrame, использоватьlineterminatorудалить пространство между строкой и '.write('\n'), чтобы добавить пространство междуDataFrame.

      import pandas as pd
import numpy as np


with open('report_.csv', 'w') as f:
    for _ in range(4):  # loop here
        df = pd.DataFrame(np.random.random((3,4)))

        df.to_csv(f,
                  index=True,  # to include index
                  header=True,  # to include header
                  lineterminator='\n',  # to remove whitespace between row
                 )
        f.write('\n')  # remove this to delete whitespace between DataFrame

Из моего первоначального ответа здесь

Другие вопросы по тегам