2015-08-15 2 views
2

У меня есть CSVPython ненужные пустые строки после строки полосы

"AA","AB","AC" 
"BA","BB","BC" 
"CA","CB","CC" 

после удаления строки говорят "изменения формата CSV в

AA,AB,AC 

BA,BB,BC 

CA,CB,CB 

Что я должен сделать, чтобы избежать нежелательных линий?

import fileinput 
for line in fileinput.FileInput("test.csv",inplace=1): 
    line = line.replace('"','') 
    print (line) 

ответ

5

Похоже, что вы его печатаете, выглядит как Python 3, и похоже, что в вашем файле уже есть необходимые новые строки. Таким образом, вы должны сказать функция print() не добавить свои собственные переводы строк:

print(line, end='') 
+0

избил меня к нему;). – Cyphase

+2

Вы хотите 'end', а не' sep'. – Cyphase

+1

К сожалению. Я использую 'sep' намного чаще, чем' end'. – TigerhawkT3

1

Почему вы это делаете? Вы должны использовать модуль csv, он будет обрабатывать как ,, так и кавычки для вас. Пример -

import csv 
with fileinput.FileInput('test.csv',inplace=1) as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print (','.join(row)) 

Пример/Demo -

>>> import csv 
>>> with fileinput.FileInput('test.csv',inplace=1) as f: 
...  reader = csv.reader(f) 
...  for row in reader: 
...   print(','.join(row)) 
... 
AA,AB,AC 
BA,BB,BC 
CA,CB,CC 
+0

Я думаю, что OP хочет обновить файл на месте, следовательно, использовать 'fileinput'. Однако это может быть недействительным предположением :) – mhawke

+0

Модуль csv также будет работать с fileinput. Обновите код и пример для этого. –

+0

Сочетание fileinput с csv работает хорошо. – mhawke

0

Вы видите лишние строки, потому что строки считываются из файла заканчиваются «\ п» и печать (строка) оператор присоединяет дополнительная новая строка.

Вы можете использовать rstrip(), чтобы вырезать заднюю строку:

import fileinput 
for line in fileinput.FileInput("test.csv",inplace=1): 
    line = line.rstrip().replace('"','') 
    print (line) 
2

При чтении каждой строки включает в себя завершающий символ новой строки. Кроме того, print() также добавит новую линию своей собственной, поэтому вы получите две новые строки.

Но вы не используете strip(), как предложено по вашему вопросу.

Чтобы обойти, что вы можете использовать rstrip(), чтобы удалить пробелы в конце каждой строки:

import fileinput 
for line in fileinput.FileInput("test.csv",inplace=1): 
    line = line.replace('"','').rstrip() 
    print (line) 

Это позволит избавиться от лишних символы новой строки, но учтите, что он будет также удалить другие пробелы в конце строки.

Альтернатива для предотвращения print() добавления своей собственной новой линии:

Python 2:

print(line), # comma prevents new line 

Python 3:

print(line, end='') 
+0

Просто любопытно: почему парнеры в версии Python 2? –

+0

@ron.rothman: только потому, что OP имел их в вопросе, и мне было непонятно, использует ли OP Python 2 или Python 3. Они не повреждают Python 2, поэтому я оставил их там. – mhawke

+0

Технически, добавление скобок в Python 2 может превратить что-то вроде 'print 1,2,3' ->' 1 2 3' в 'print (1,2,3)' -> '(1, 2, 3)'. Однако это не проблема, потому что этот вопрос касается строк. – TigerhawkT3

Смежные вопросы