2013-07-05 2 views
6

Я пытаюсь прочитать каждую вторую строку в файле CSV и распечатать ее в новом файле. К сожалению, я получаю пустую строку, которую я не могу удалить.Прочитайте каждую вторую строку и напечатайте новый файл

lines = open('old.csv', "r").readlines()[::2] 
file = open('new.csv', "w") 
n = 0 
for line in lines: 
    n += 1 
    if ((n % 2) == 1): 
      print >> file, line 

код, я использую, просто посмотрев на значение modolus из n, чтобы решить, если его на самом деле каждый второй линии или нет. Я даже пытался с strip() и rstrip(), который все еще берет пустые строки.

+0

Вы уже захватываете каждую строку с помощью 'readlines() [:: 2]' –

ответ

11

В ответ на ваш вопрос, ваша пустая строка приходит от:

print >> file, line 

Использования print подобного автоматически выводит новую строку, либо использовать sys.stdout.write или используйте Запятую подавить символ новой строки, например :

print >> file, line, 

Во всяком случае, лучший способ приблизиться к этой общей является использование itertools.islice для:

from itertools import islice 

with open('input') as fin, open('output', 'w') as fout: 
    fout.writelines(islice(fin, None, None, 2)) 

А при необходимости, отфильтровать пустые строки, а затем принимать каждые 2 от ...

non_blanks = (line for line in fin if line.strip()) 
fout.writelines(islice(non_blanks, None, None, 2)) 

Гораздо более удобный и гибкий, чем отвод о с модулем и тому подобными.

1

Попробуйте взглянуть на библиотеку python для файлов csv. Он довольно всеобъемлющий и должен помочь вам сделать то, что вы ищете, чтобы сделать более чисто.

1

Рекомендация: чтобы очистить ваш код немного, и избавиться от необходимости вручную увеличить и объявить переменную счетчика, использование:

для (line_index, линии) в Перечислять (строки): . ..

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