簡體   English   中英

在Python CSV中跳過多行

[英]Skipping more than one row in Python csv

我正在連接到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正確保存數據而無需數據庫做更多的工作。

您可以使用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)

您可以在for循環中添加一個計數器和一個if語句。

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

使用列表推導跳過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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM