根据 python 中列中的值将 csv 文件中的记录分成块时出错

Error in breaking records in csv file into chunks based on values in a column in python

我有一个 csv 文件 - file1.csv,每行有 3 列。示例如下所示:

A,d1,200
A,d2,250
A,d3,10
B,d1,100
B,d2,150
B,d4,45
.
.
.

以上数据的结构是 - loacation_id,dept_id,num_emp。现在我要做的是根据第 1 列值将 csv 文件的记录分成块,这样在一个块中只有位置,然后将这些块一个一个地传递给一个函数。我根据 this SO post 编写了此代码,但出现 TypeError: 'itertools._grouper' object has no attribute '__getitem__' 错误。我当前的代码是:

import csv
from itertools import groupby

def func(chunk):

    for line in chunk:
        print line

file_read = open('file1.csv', 'r')
reader = csv.reader(file_read)

for rows in groupby(reader):
    func(rows)

如何根据一列中的值将记录分成块并将块传递给函数?

下面的方法怎么样,这将读取您的 csv 文件并显示按第一列分组的信息:

import csv
import itertools

def display_group(group):
    print "Group {}".format(group[0][0])

    for entry in group:
        print entry

groups = []
location_ids = []

with open('file1.csv', 'r') as f_input:
    csv_input = csv.reader(f_input)

    for k, g in itertools.groupby(csv_input, key=lambda x: x[0]):
        groups.append(list(g))
        location_ids.append(k)

print "Location IDs:", location_ids

for group in groups:            
    display_group(group)

这将显示以下数据:

Location IDs: ['A', 'B']
Group A
['A', 'd1', '200']
['A', 'd2', '250']
['A', 'd3', '10']
Group B
['B', 'd1', '100']
['B', 'd2', '150']
['B', 'd4', '45']