根据 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']
我有一个 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']