Пустое пространство между строками после использования 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
Из моего первоначального ответа здесь