2016-08-30 3 views
2

При сохранении данных в csv, data.to_csv('csv_data', sep=',', encoding='utf-8', header= False, index = False), он создает пустую строку в конце файла csv.Как прекратить писать пустую строку в конце файла csv - pandas

Как вам избежать этого?

Это связано с line_terminator, и по умолчанию это значение n, для новой строки.

Есть ли способ указать line_terminator, чтобы избежать создания пустой строки в конце или мне нужно прочитать файл csv, удалить пустую строку и сохранить ее?

Не знаком с пандами. Ваша помощь будет оценена, спасибо заранее!

+1

, имеющий разрыв строки в конце последней заполненной линии, является довольно стандартным. Почему это проблема? –

+0

Файл csv будет использоваться другим скриптом и не может принимать пустые строки или дополнительные пробелы, сценарий будет разорван. У меня нет доступа к этим скриптам. В настоящее время я копирую данные, вставляя их в vim и каждый раз удаляя последнюю строку. Я буду как можно больше автоматизировать его. – medev21

+2

Если вы передаете 'None' в качестве имени файла, pandas возвращает строковый объект. 's = data.to_csv (Нет, sep = ',')' например. Вы можете напрямую писать 's [: - 1]' в файл. Однако я не уверен в кодировке. Ты можешь попробовать? – ayhan

ответ

2

Одним из способов было бы сохранить данные, кроме последней записи, по умолчанию line_terminator (\n) и добавить последнюю строку с помощью line_terminator="".

data1 = data.iloc[0:len(data)-1] 
data2 = data.iloc[[len(data)-1]] 
data1.to_csv('csv_data', sep=',', encoding='utf-8', header= False, index = False) 
data2.to_csv('csv_data', sep=',', encoding='utf-8', header= False, index = False,mode='a',line_terminator="") 
2

По какой-то причине терминатор линии не работал, когда я попробовал. (Это дало ошибку, говоря line_terminator является непризнанным аргумент ключевого слова.)

Однако, это будет делать трюк:

df.to_csv(path) 
    with open(path) as f: 
     lines = f.readlines() 
     last = len(lines) - 1 
     lines[last] = lines[last].replace('\r','').replace('\n','') 
    with open(path, 'w') as wr: 
     wr.writelines(lines) 
+0

Чтобы преодолеть эту ошибку, используйте этот синтаксис: data.iloc [-1 :, 0: -1] .to_csv (index = False, sep = ',', header = False, mode = 'a', line_terminator = "") – pkgajulapalli

0

Более эффективный способ, чтобы открыть файл первым, запись в этот поток, затем удалите последнюю строку новой строки:

import os 
with open('csv_data', 'wb') as dst: 
    data.to_csv(wb, sep=',', encoding='utf-8', header= False, index = False) 
    dst.seek(-1, os.SEEK_END) # <---- 1 : len('\n') 
    dst.truncate() 
Смежные вопросы