2015-09-18 24 views
0

我有一個csv文件 - file1.csv,它在每行中有3列。樣品看起來是這樣的:根據python中列中的值將csv文件中的記錄拆分爲塊的錯誤

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

上述數據的結構 - loacation_id,dept_id,num_emp。現在我想要做的基於第一列值突破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) 

如何根據一列中的值將記錄分塊爲塊並將塊傳遞給函數?

回答

1

如何以下方法,這會在你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'] 
+0

做group [0] [0]給我組密鑰?我的意思是,如果在我的數據集中有5個組(5個不同的location_id),那麼有什麼方法可以將它們存儲在列表中,同時形成組? – user2966197

+0

它爲您提供了組中第一個條目的第一列,所以是的,它會給你組密鑰。 –

+0

我已經更新腳本以存儲首先打印的位置ID的單獨列表。 –

相關問題