在python中通过offset [0]分块大型csv文件

时间:2015-08-30 17:49:47

标签: python list csv

我有以下格式的CSV文件:

1,data,data2,data3.....
1,data,data2,data3.....
2,data,data2,data3.....
2,data,data2,data3.....
3,data,data2,data3.....
3,data,data2,data3.....

我需要通过offset [0]将这些字符串分块到一个列表中,以便我得到多个列表:

1,data,data2,data3.....
1,data,data2,data3.....

和另一个:

2,data,data2,data3.....
2,data,data2,data3.....

等。我有以下代码:

import csv
filename = 'somefile.csv'
with open(filename) as csv_file:
    readCSV = csv.reader(csv_file, delimiter=',')
    chunk1 = []
    for row in csv_file:
        if row[0] is '1':
            print(row)
        else:
            break

这只给出了第一个块我需要调整它以获得列表中相同集合的所有块。

2 个答案:

答案 0 :(得分:1)

假设它们按第一列排序,这样就可以了:

import csv

from itertools import groupby
from operator import itemgetter


filename = 'somefile.csv'

with open(filename) as csv_file:
    csvreader = csv.reader(csv_file, delimiter=',')
    chunks = [list(g) for k, g in groupby(csvreader, itemgetter(0))]

答案 1 :(得分:0)

使用字典聚合所有块。如果您需要将其保留在阅读顺序中,请使用OrderedDict

import csv
filename = 'somefile.csv'
with open(filename) as csv_file:
    readCSV = csv.reader(csv_file, delimiter=',')
    chunks = {}
    for row in csv_file:
        if row[0] not in chunks:
            chunks[row[0]] = []
        chunks[row[0]].append(row)