2015-11-04 108 views
0

編寫了一個python腳本,用於獲取單元格值並逐行顯示在列表中。openpyxl從excel中提取值並在鍵值對中存儲

這是我的腳本:

book = openpyxl.load_workbook(excel_file_name) 
active = book.get_sheet_by_name(excel_file_name) 

def iter_rows(active): 
    for row in active.iter_rows(): 
     yield [cell.value for cell in row] 

res = list(iter_rows(active)) 
for new in res: 
    print new 

輸出用於上述的腳本:[州,國家代碼] [ABC,XYZ, 0] [DEF,LMN,0]

我想在下面的格式輸出:狀態:ABC,國家:XYZ, 代碼:0] [狀態:閃避,國家:LMN,代碼:0]

請注意:我想從openpyxl做到這一點

+0

遺憾的重複。因爲我以前的問題的格式不好。 – louis

+0

添加一個與工作表方法同名的生成器似乎是代碼不必要的複雜化。您可能想要提取第一行以獲取密鑰,然後使用zip作爲@ mike-muller的建議。 –

回答

2

試試這個:

res = iter_rows(active) 
keys = next(res) 
for new in res: 
    print dict(zip(keys, new)) 

res是一個迭代器。因此,next(res)給出了下一個元素。在我們的案例中,字典的關鍵字。使用for循環對res的其餘部分進行迭代,dict()爲每個元素new創建一個新字典,對所有字典使用相同的keys。函數zip()以這樣的方式組合了兩個(或更多)序列,它創建具有來自每個序列的一個元素的對。 dict()使用這些對中的一個作爲一個新項目的關鍵和值,並通過所有對。例如,這樣的:

dict(zip('abc', [1, 2, 3])) 

結果在這本字典:

{'a': 1, 'b': 2, 'c': 3} 
+0

謝謝Mike Muller!這對我有效。請你能說出邏輯! – louis

+0

再次感謝!現在這個例子很清楚。 – louis

相關問題