2016-02-09 37 views
0

选择.csv文件中的每第5行只是一个普通的.csv文件 ,第一行具有每列的标题。如何使用python

我不知道如何创建一个新的.csv文件,它具有相同的标题(第一行),但包含原始文件的每第五行?

谢谢!

回答

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)

如果” ð喜欢先从数据列#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

“如果列未被访问”仅当CSV中没有多行字段时才为true。你可以有一个合法的字段“line 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])