目標: 將json文本解析並存儲到excel中
使用python包 openpyx
import simplejson
mport codecs
import openpyxl import os # def write_xlsx(origin_root_path,file_name, write_path, workbook): origin_path = origin_root_path + file_name sheet_name = file_name.split('.')[0] print(sheet_name + ' sheet ' + "processing ...") # 使用simplejson.load方法先讀原始json文件origin_path file = codecs.open(origin_path, 'rb', 'utf-8') file_json = simplejson.load(file) # 創建sheet # 該方法傳入了workbook的參數,所以函數體內部未新建workbook worksheet = workbook.create_sheet(sheet_name) # 寫入excel數據行 row = 1 cmp_names = list(file_json.keys()) cmp_len = len(cmp_names) for i in range(cmp_len): #每個公司 cmp_name = cmp_names[i] # 是否有多頁數據 pages_len = len(file_json[cmp_name]) for pages_in in range(pages_len): #每頁數據 cmp_page = file_json[cmp_name][pages_in] # code = 200 有數據 if(cmp_page['code'] == 100 or cmp_page['code'] ==500): continue elif(cmp_page['code'] == 200): cmp_page_data = file_json[cmp_name][pages_in]['data'] # 第pages_in頁數據 # 判斷每頁是否有多條數據(根據cmp_data字典中時是否有key:list來判斷) if( 'list' in list(cmp_page_data.keys())): #data中多條數據 # list中每一個元素一行數據 cmp_data_list = cmp_page_data['list'] cmp_data_list_len = len(cmp_data_list) for item_in in range(cmp_data_list_len): item_data = cmp_data_list[item_in] item_data_keys = list(item_data.keys()) item_data_values = list(item_data.values()) item_data_len = len(item_data_values) #寫入表頭 if(row == 1): worksheet.cell(row, 1, "CMP_NAME") for col in range(item_data_len):
#調用worksheet.cel方法根據row和col定位在excel中的單元格,寫入value。
#注意,row和col均從1開始
worksheet.cell(row, col+2, item_data_keys[col]) row = row +1 # 寫入行數據 else: worksheet.cell(row, 1, cmp_name) for col in range(item_data_len): worksheet.cell(row, col+2, item_data_values[col]) row = row + 1 # print(cmp_name + '\t' + item_data_values)# 打印行數據 else: # data中沒有list。單條數據 cmp_data_len = len(cmp_page_data) cmp_data_keys = list(cmp_page_data.keys()) cmp_data_values = list(cmp_page_data.values()) # 寫入表頭 if (row == 1): worksheet.cell(row=row, column=1).value = "CMP_NAME" for col in range(cmp_data_len): worksheet.cell(row, col+2, cmp_data_keys[col]) row = row + 1 else: worksheet.cell(row, 1, cmp_name) for col in range(cmp_data_len): worksheet.cell(row, col+2, cmp_data_values[col]) # print (cmp_name + '\t' + str(cmp_data_values)) row = row + 1 print(sheet_name + ' sheet ' + "Done ...") print ('-'*30) if __name__ == '__main__': origin_root_path = r'C:\Users\01161151\Desktop\20家公司\testcmp/' write_path = r'C:\Users\01161151\Desktop\20家公司/excel.xlsx' files = os.listdir(origin_root_path) #workbook workbook = openpyxl.Workbook() for i in range(len(files)): file_name= files[i] write_xlsx(origin_root_path, file_name, write_path, workbook) #存儲在xlsx路徑中 workbook.save(write_path)
使用openpyxl寫入excel(格式為xlsx)主要步驟:
1. workbook workbook = openpyxl.Workbook()
2. worksheet worksheet = workbook.create_sheet(sheet_name) 在workbook中創建一個名字為sheetname的sheet頁
3. worksheet.cell(row,col,value) worksheet.cell(row, col+2, cmp_data_values[col]) 以(ROW,COL)定位單元格,寫入value
4. workbook.save(xlsx文件路徑)
