我正在连接API来获取一些数据。输出是一个报告,其中包含一个多行标题以及传统的单行标题。
示例:
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行的行写为标题行,将其后的所有其他行写为普通行。
现在,我知道如何通过一条线路跳过具有next(reader, None)
,但如何跳过多行,如果我知道跳过会像在实施例一致5行的行数
我通常会使用数据库来跳过这些行,但是我想知道是否可以让Python正确保存数据而不需要数据库做更多的工作。
答案 0 :(得分:11)
您可以使用itertools.islice,将要开始写入的行作为第二个参数传递,以便第6行为0时使用5
,如果stop为None,则迭代继续,直到迭代器耗尽
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)
答案 1 :(得分:2)
您可以将一个计数器和一个if语句添加到for循环中。
count = 0
for line in opened_file:
if count < 5:
count += 1
continue
#Parse lines
答案 2 :(得分:0)
使用列表理解跳过5个标题行:
import csv
nheaderlines = 5
with open(path + file) as csvfile:
reader = csv.DictReader(csvfile)
[next(reader, None) for item in range(nheaderlines)]
for row in reader:
print(row)