2013-07-05 14 views
6

Próbuję odczytać co drugą linię w pliku CSV i wydrukować ją w nowym pliku. Niestety otrzymuję pustą linię, której nie mogę usunąć.Czytanie co drugiej linii i drukowanie do nowego pliku

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 

Kod używam jest po prostu patrząc na wartości modolus z n zdecydować, czy jego faktycznie co drugiej linii czy nie. Próbowałem nawet z strip() i rstrip(), które nadal pobiera puste linie.

+0

Już chwytasz każdą inną linię za pomocą 'readlines() [:: 2]' –

Odpowiedz

11

W odpowiedzi na pytanie, twój pusty wiersz pochodzi z:

print >> file, line 

Korzystanie print takiego automatycznie wyprowadza nową linię, albo użyć sys.stdout.write lub użyj przecinka trailing stłumić znak nowej linii, np :

print >> file, line, 

w każdym razie, lepszy sposób podejść do tej ogólnej jest użycie itertools.islice dla:

from itertools import islice 

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

A jeśli to konieczne, odfiltrować puste wiersze, potem wziąć co 2 z tym, że ...

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

wiele bardziej wygodne i elastyczne niż mucking z modułu i takie.

1

Spróbuj rzucić okiem na biblioteki Pythona dla plików csv. Jest dość obszerny i powinien pomóc ci zrobić to, co chcesz robić czysto.

1

Zalecenie: oczyścić swój kod nieco, i pozbyć się konieczności ręcznego inkrementacji i zadeklarować zmienną licznika, przeznaczenie:

dla (line_index, linia) w enumerate (linie): . ..

Powiązane problemy