简体   繁体   中英

Creating dictionary from excel workbook in python using sheet names as key

I have multiple excels sheets in workbook with names like sheet1, sheet2 , sheet3 and I am converting the data in each sheet into a dictionary using headers as key. But now I want to create a nested dictionary where i add sheet name as key to each of the above dictionaries. My table has multiple sheets of this form: Sheet1

IP Address     prof     type
xx.xx.xx       abc      xyz
xx.xx.xx       efg      ijk

Sheet2

IP Address     prof     type
xx.xx.xx       abc      xyz
xx.xx.xx       efg      ijk

Now I attempted like this:

from xlrd import open_workbook

book = open_workbook('workbook.xls')
sheet = book.sheet_by_index(0)
sheet_names = book.sheet_names()

# reading header values 
keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)]

dict_list = []
for row_index in range(1, sheet.nrows):
    d = {keys[col_index]: sheet.cell(row_index, col_index).value
         for col_index in range(sheet.ncols)}
    dict_list.append(d)

print (dict_list)

Which prints this :

[{'IP Address': 'xx.xx.xx', 'prof': 'abc', 'type': 'xyz'}, {'IP Address': 
'xx.xx.xx', 'prof': 'efg', 'type': 'ijk'}]

what I need is :
    [{'Sheet1':{'IP Address': 'xx.xx.xx', 'prof': 'abc', 'type': 'xyz'}, {'IP 
    Address': 'xx.xx.xx', 'prof': 'efg', 'type': 'ijk'}},
    {'Sheet2':{'IP Address': 'xx.xx.xx', 'prof': 'abc', 'type': 'xyz'}, {'IP 
      Address': 'xx.xx.xx', 'prof': 'efg', 'type': 'ijk'}},
       ]

I have problems adding the sheet name as key for multiple sheets in workbook.

Any help will be appreciated.

from xlrd import open_workbook

book = open_workbook('Workbook1.xlsx')
pointSheets = book.sheet_names()
full_dict = {}
for i in pointSheets:
    # reading header values 
    sheet = book.sheet_by_name(i)
    keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)]

    dict_list = []
    for row_index in range(1, sheet.nrows):
        d = {keys[col_index]: sheet.cell(row_index, col_index).value
             for col_index in range(sheet.ncols)}
        dict_list.append(d)
    full_dict[i] = dict_list
    dict_list = {}

print (full_dict)

This code iterates over each sheet and appends to ´full_dict´ the sheet_name followed by what your code already returned for each sheet. The aquisition of names was done referencing " How to get excel sheet name in Python using xlrd "

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM