2015-08-08 71 views
5

我连接到一个API来拦截一些数据。输出是一个报告,其中包含一个与传统的单行标题相结合的多行标题。跳过Python中的多行csv

实施例:

1. Document Name: Test 
2. Document Date: 8/7/2015 
3. Document ID: 3804804 
4. Document Author: Joe Blow 
5. 
6. Date, ID, Name, Age, Sex, Result 
7. 8/7/2015, 2808380, Sara Jenkings, 33, F, 208.20 

在该示例中,我要跳过1行 - 第5和后,作为正常的行写在作为标题行线6和所有其它行的行。

现在,我知道如何在下一行(reader,None)上跳过一行,但是如果我知道要跳过的行数将始终如一行5行,如何跳过多行?

任何帮助,非常感谢。我通常会使用数据库来跳过行,但我想看看是否可以让Python在没有数据库做更多工作的情况下正确保存数据。

回答

6

您可以使用itertools.islice,路过行,你想的那么的6号线是基于您使用50开始从作为第二个参数写入如果停止为无,然后迭代继续进行,直到迭代耗尽

import csv 

from itertools import islice 

with open("in.csv") as f, open("out.csv","w") as out: 
    r = csv.reader(islice(f, start=5,stop=None)) 
    wr = csv.writer(out) 
    wr.writerows(r) 

你不一定需要csv模块,如果你保持线条的是:

with open("in.csv") as f, open("out.csv","w") as out: 
    r = islice(f, 5 ,None) 
    out.writelines(r) 
+0

谢谢。我必须将输出保存到一个csv文件,然后创建另一个文件来输入islice输出作为清理后的csv文件。它在没有csv模块的情况下完美运行,因为数据已经从流中以csv格式存在。但是,有没有办法将islice与流数据一起使用,还是必须将数据输出到csv(in.csv)并通过islice运行该文件? – Fastidious

+0

数据来自哪里? –

+0

数据来自API(我相信通过Python发出的HTTP请求)。 – Fastidious

1

您可以if语句添加计数器和一个用于循环。

count = 0 
for line in opened_file: 
    if count < 5: 
     count += 1 
     continue 
    #Parse lines