2016-02-09 3 views
0

только обычный .csv-файл с первой строкой имеет заголовки для каждого столбца.как выбрать каждую пятую строку в CSV-файле с использованием python

Интересно, как создать новый CSV-файл с одним и тем же заголовком (первая строка), но содержит все 5-е строки исходного файла?

спасибо!

ответ

0

Это будет читать файл по одной строке за один раз, и писать только строки 5, 10, 15, 20 ...

import csv 

count = 0 

# open files and handle headers 
with open('input.csv') as infile: 
    with open('ouput.csv', 'w') as outfile: 
     reader = csv.DictReader(infile) 
     writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames) 
     writer.writeheader() 

     # iterate through file and write only every 5th row 
     for row in reader: 
      count += 1 
      if not count % 5: 
       writer.writerow(row) 

(работа с Python 2 и 3)

Если вы» d предпочитает начинать с строкой данных # 1, чтобы записать строки 1, 6, 11, 16 ... в верхней смене:

count = -1 
0

Это приведет любой текстовый файл и вывести первую и каждую 5-ю строчку после что. Он не должен манипулировать как .csv, если столбцы не обращались:

with open('a.txt') as f: 
    with open('b.txt','w') as out: 
     for i,line in enumerate(f): 
      if i % 5 == 0: 
       out.write(line) 
+0

«если столбцы не доступны» true, только если в CSV нет многострочных полей. У вас может быть законное поле «строка 1 \ nline 2», которое должно быть единственным полем на выходе. – dawg

0

Если вы хотите использовать библиотеку CSV, более жесткий вариант будет ...

import csv 

# open files and handle headers 
with open('input.csv') as infile: 
    with open('ouput.csv', 'w') as outfile: 
     reader = csv.DictReader(infile) 
     writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames) 
     writer.writeheader() 

     # iterate through file and write only every 5th row 
     writer.writerows([x for i,x in enumerate(reader) if i % 5 == 4])