excel填數據轉json格式

定制化比較嚴重,按需更改

excel文件如下

?代碼

# -*- coding: utf-8 -*-
import oss2
import shutil
import sys
import xlwt
import xlrd
import json
from datetime import datetime, timedeltafile1 = "C:\\Users\\cxy\\Desktop\\generate.xls"
#打開表1
wb1 = xlrd.open_workbook(filename=file1)# 表1的sheet
sheet = wb1.sheet_by_index(1)
# 表1的sheet的總行數
rowNum = sheet.nrows
# 表1的sheet的總列數
colNum = sheet.ncolsjson_data = {}def getCellValue(row,col): # if row == 8:#     print(1)value = sheet.cell_value(row,col)if str(value).endswith(".0"):return str(value).split(".0")[0]# if type(value) == float:#     value = '%.2f' % sheet.cell_value(8,8)return value
def getRowValue(row):return sheet.row_values(row)
def getColValue(col,start_rowx=0, end_rowx=None):return sheet.col_values(col, start_rowx, end_rowx)
def isKeyRow(row):return any(s == '$$key$$' for s in sheet.row_values(row))
import redef name_convert_to_camel(name: str) -> str:"""下劃線轉駝峰(小駝峰)"""return re.sub(r'(_[a-z])', lambda x: x.group(1)[1].upper(), name)def arr_str_to_arr(value: str) -> str:"""數組字符串變成數組類型"""value = str(value)if re.match('^\[', value) and re.search('\]$', value):arr = value.strip("[]").split(",")temp = []for v in arr:temp.append({"name":add_oss_host(v)})return tempreturn add_oss_host(value)def add_oss_host(value: str) -> str:content = str(value)if content.endswith(".png") or content.endswith(".jpeg") or content.endswith(".mp4") or content.endswith(".jpg"):return "/s" + contentelse:return contentdef resolveData(cur_level,start_row,end_row,data):col_values = sheet.col_values(cur_level, start_row, end_row)cur_level_key_row = [i+start_row for i in range(0,len(col_values)) if col_values[i] == '$$key$$']# cur_level_key_row.append(rowNum)for index, row_index in enumerate(cur_level_key_row):key_row = getRowValue(row_index)key = key_row[cur_level+1]if str(key).endswith(".0"):key = str(key).split(".0")[0]type = key_row[cur_level+2]if isKeyRow(row_index+1):# 第一行就遇到keyif type == 'array':print("第"+(row_index+1)+"行格式不對")breakelse:temp = {}data[key] = tempif row_index+1<rowNum and isKeyRow(row_index+1):resolveData(cur_level + 1, row_index + 1, rowNum if (index + 1) >= len(cur_level_key_row) else cur_level_key_row[index + 1], temp)continuecolumn_row = getRowValue(row_index+1)column_name_arr = []for col_index in range(cur_level,colNum):column_name = column_row[col_index]if column_name == '':breakcolumn_name_arr.append(name_convert_to_camel(column_name))if type == 'object':temp = {}data[key] = tempfor i in range(0,len(column_name_arr)):temp[column_name_arr[i]] = arr_str_to_arr(getCellValue(row_index+2, i + cur_level) )if row_index+3<rowNum and isKeyRow(row_index+3):resolveData(cur_level + 1, row_index + 3, rowNum if (index + 1) >= len(cur_level_key_row) else cur_level_key_row[index + 1], temp)else:# [0, 18, 28]tempArr = []data[key] = tempArrarr_data_start = cur_level_key_row[index]+2arr_data_end = rowNum # 默認,下面會改next_key_index_temp = rowNumif (index + 1) < len(cur_level_key_row):next_key_index_temp = cur_level_key_row[index + 1]if cur_level == 0:arr_data_end = next_key_index_tempelse:for i_temp in range(arr_data_start, next_key_index_temp):if i_temp == rowNum-1:breakif (getCellValue(i_temp, cur_level-1) == '' and getCellValue(i_temp+1, cur_level-1) != '') or (isKeyRow(i_temp+1) and getCellValue(i_temp+1, cur_level) == '$$key$$'):arr_data_end = i_temp+1breakfor chi_row_index in range(arr_data_start, arr_data_end):colValue = getCellValue(chi_row_index, cur_level)if colValue == '':continuetemp = {}tempArr.append(temp)for i in range(0,len(column_name_arr)):temp[column_name_arr[i]] = arr_str_to_arr(getCellValue(chi_row_index, i + cur_level) )if chi_row_index + 1 < rowNum and isKeyRow(chi_row_index + 1):parentColValues = getColValue(cur_level, chi_row_index + 1, rowNum)not_empty_index = next((j for j, v in enumerate(parentColValues) if v), len(parentColValues))resolveData(cur_level + 1, chi_row_index + 1, chi_row_index + not_empty_index + 1, temp)cur_level = 0
start_row = 0
end_row = rowNum
json_data = {}resolveData(cur_level,start_row,end_row,json_data)print(json.dumps(json_data, ensure_ascii=False))target = "C:\\Users\\cxy\\Desktop\\generate_target.json"
with open(target, "w", encoding='utf-8') as f:json.dump(json_data, f, indent=4, ensure_ascii=False)

結果

{
? ? "userInfos": {
? ? ? ? "userPic": "https://oss.shop.sxmu.com/test/dzpt/頭像20.jpeg",
? ? ? ? "nickName": "墨雨無痕",
? ? ? ? "level": "42",
? ? ? ? "userId": "66606024",
? ? ? ? "gaming_career": [
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "gamePic": "https://oss.shop.sxmu.com/test/dzpt/mszb.jpeg",
? ? ? ? ? ? ? ? "gameName": "魔獸爭霸3",
? ? ? ? ? ? ? ? "level": "42",
? ? ? ? ? ? ? ? "score": "96800",
? ? ? ? ? ? ? ? "gaming_career": [
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "modePic": "https://oss.shop.sxmu.com/test/dzpt/ch.png",
? ? ? ? ? ? ? ? ? ? ? ? "modeName": "澄海3C",
? ? ? ? ? ? ? ? ? ? ? ? "score": "56800",
? ? ? ? ? ? ? ? ? ? ? ? "gameTimes": "1000"
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "modePic": "https://oss.shop.sxmu.com/test/dzpt/DOTA6.83.png",
? ? ? ? ? ? ? ? ? ? ? ? "modeName": "DOTA 6.83",
? ? ? ? ? ? ? ? ? ? ? ? "score": "40000",
? ? ? ? ? ? ? ? ? ? ? ? "gameTimes": "650"
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ]
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "gamePic": "https://oss.shop.sxmu.com/test/dzpt/cs.jpg",
? ? ? ? ? ? ? ? "gameName": "CS",
? ? ? ? ? ? ? ? "level": "38",
? ? ? ? ? ? ? ? "score": "76500"
? ? ? ? ? ? }
? ? ? ? ]
? ? },
? ? "player_list": {
? ? ? ? "star_list": [
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "userPic": "https://oss.shop.sxmu.com/test/dzpt/頭像11.jpeg",
? ? ? ? ? ? ? ? "nickName": "阿海",
? ? ? ? ? ? ? ? "userDesc": "喜歡跳不上的b小,架不住的a1,最愛的沙鷹,放不開也抓不住。",
? ? ? ? ? ? ? ? "online": "0"
? ? ? ? ? ? },
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "userPic": "https://oss.shop.sxmu.com/test/dzpt/頭像12.jpeg",
? ? ? ? ? ? ? ? "nickName": "醉念",
? ? ? ? ? ? ? ? "userDesc": "只不過游戲而已,玩的再牛逼又如何",
? ? ? ? ? ? ? ? "online": "0"
? ? ? ? ? ? }
? ? ? ? ],
? ? ? ? "fans_list": [
? ? ? ? ? ? {
? ? ? ? ? ? ? ? "userPic": "https://oss.shop.sxmu.com/test/dzpt/頭像16.jpeg",
? ? ? ? ? ? ? ? "nickName": "亡夢",
? ? ? ? ? ? ? ? "userDesc": "遺憾與殘局皆,與神明畫過押。",
? ? ? ? ? ? ? ? "online": "0"
? ? ? ? ? ? }
? ? ? ? ]
? ? }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用phpunit進行單元測試

使用phpunit進行單元測試 本教程假定您使用 PHP 8.1 或 PHP 8.2。您將學習如何編寫簡單的單元測試以及如何下載和運行 PHPUnit. PHPUnit 10 的文檔 在這。 下載&#xff1a;可以用以下2種方法之一&#xff1a; 1.PHP 存檔 (PHAR) 我們分發了一個 PHP存檔&#xff08;PHAR&…

MySQL8的下載與安裝-MySQL8知識詳解

本文的內容是mysql8的下載與安裝。主要講的是兩點&#xff1a;從官方網站下載MySQL8安裝和從集成環境安裝MySQL8。 一、從官方網站下載MySQL8.0安裝 MySQL8.0官方下載地址是&#xff1a;&#xff08;見圖&#xff09; 官方正式版的最新版本是8.0.34&#xff0c;也推出了創新版…

Kafka第三課

Flume 由三部分 Source Channel Sink 可以通過配置攔截器和Channel選擇器,來實現對數據的分流, 可以通過對channel的2個存儲容量的的設置,來實現對流速的控制 Kafka 同樣由三大部分組成 生產者 服務器 消費者 生產者負責發送數據給服務器 服務器存儲數據 消費者通過從服務器取…

【C++11保姆級教程】auto和decltype

文章目錄 前言總結一、auto1.初識auto關鍵字 2.auto使用二、decltype1.初識decltype2.使用decltype 總結 前言 在C11中引入了一些新的關鍵字和特性&#xff0c;其中包括auto和decltype。這兩個關鍵字提供了更方便、更靈活的類型推斷機制&#xff0c;使得代碼編寫更加簡潔和可讀…

shell 命令 tee {..}定義循環體

tee & {..}定義循環體 tee{..} 循環體 tee 作用&#xff1a;將標準輸出流內容復制文件中&#xff0c;同時控制臺信息依然會顯示。 > 和 >> 直接將標準輸出流內容重定向&#xff0c;從而導致控制臺無法看到輸出內容。 可選參數 -a &#xff1a;追加內容&#xff1…

CSS3中的var()函數

目錄 定義&#xff1a; 語法&#xff1a; 用法&#xff1a; 定義&#xff1a; var()函數是一個 CSS 函數用于插入自定義屬性&#xff08;有時也被稱為“CSS 變量”&#xff09;的值 語法&#xff1a; var(custom-property-name, value) 函數的第一個參數是要替換的自定義屬性…

MATLAB | 繪圖復刻(十一) | 截斷的含散點及誤差棒的分組柱狀圖

hey大家好久不見&#xff0c;本期帶來一篇繪圖復刻&#xff0c;居然已經出到第11篇了&#xff0c;不知道有朝一日有沒有機會破百&#xff0c;本期繪制的是《PNAS》期刊中pnas.2200057120文章的figure03&#xff0c;文章題目為Intranasal delivery of full-length anti-Nogo-A a…

Debian/Ubuntu清理硬盤空間

Debian/Ubuntu清理硬盤空間_debian清理磁盤空間_weixin_43606319的博客-CSDN博客 1. 刪除殘余的配置文件 通常Debian/Ubuntu刪除軟件包可以用兩條命令 sudo apt-get remove <package-name> sudo apt-get purge <package-name> remove將會刪除軟件包&#xff0…

量化交易接口如何實現量化交易?(程序化交易接口)API

量化交易接口是通過連接投資者的交易賬戶和量化交易系統&#xff08;程序化交易系統&#xff09;&#xff0c;實現自動化的交易操作。以下是量化交易接口實現量化交易的一般步驟&#xff1a; 1. 數據獲取&#xff1a;量化交易接口首先需要通過與行情數據供應商或交易所的API接…

車載以太網物理層

車載以太網物理層 O S I 參考模型的第 1 層&#xff08; 最底層&#xff09;。負責邏輯信號&#xff08; 比特流&#xff09;與物理信號&#xff08;電信號、光信號&#xff09;之間的互相轉換&#xff0c;通過傳輸介質為數據鏈路層提供物理連接。 車載以太網與傳統以太網相比…

java實現docx,pdf文件動態填充數據

一&#xff0c;引入pom 根據需求引入自己所需pom org.apache.poi poi 4.1.1 org.apache.poi poi-ooxml 4.1.1 org.jxls jxls 2.6.0 ch.qos.logback logback-core org.jxls jxls-poi 1.2.0 fr.opensagres.xdocreport fr.opensagres.xdocreport.core 2.0.2 fr.opensagres.xdocrep…

QT筆記——QProcess學習

我們常常想通過某一個類&#xff0c;來啟動一個外部進程 本文將講解如何通過QProcess來進行啟動外部進程 一&#xff1a;了解QProcess QProcess是Qt框架提供的一個類&#xff0c;用于在應用程序中執行外部進程。它提供了一系列函數來啟動、控制和與外部進程進行交互 1.啟動進程…

C++入門基礎(萬字詳解!!!)

文章目錄 前言1.C關鍵字2.命名空間3.C的輸入輸出4.缺省參數4.1 全缺省4.2 半缺省 5.函數重載6. 引用6.1 引用的特性6.2 引用的使用場景6.3 引用和指針 7.內聯函數7.1 特性 8.auto關鍵字8.1 注意事項 9. 基于范圍的for循環9.1 使用條件 10.指針控制nullptr10.1 注意事項 11.總結…

fastadmin 自定義搜索分類和時間范圍

1.分類搜索&#xff0c;分類信息獲取----php 2.對應html頁面&#xff0c;頁面底部加搜索提交代碼&#xff08;這里需要注意&#xff1a;紅框內容&#xff09; 圖上代碼----方便直接復制使用 <script id"countrySearch" type"text/html"><!--form…

安全 1自測

常見對稱加密算法&#xff1a; DES&#xff08;Data Encryption Standard&#xff09;&#xff1a;數據加密標準&#xff0c;速度較快&#xff0c;適用于加密大量數據的場合&#xff1b; 3DES&#xff08;Triple DES&#xff09;&#xff1a;是基于DES&#xff0c;對一塊數據用…

Spring相關面試題

&#x1f44f;作者簡介&#xff1a;大家好&#xff0c;我是愛寫博客的嗯哼&#xff0c;愛好Java的小菜鳥 &#x1f525;如果感覺博主的文章還不錯的話&#xff0c;請&#x1f44d;三連支持&#x1f44d;一下博主哦 &#x1f4dd;個人博客&#xff1a;敬請期待 &#x1f4d5;系列…

時序預測 | MATLAB實現EEMD-GRU、GRU集合經驗模態分解結合門控循環單元時間序列預測對比

時序預測 | MATLAB實現EEMD-GRU、GRU集合經驗模態分解結合門控循環單元時間序列預測對比 目錄 時序預測 | MATLAB實現EEMD-GRU、GRU集合經驗模態分解結合門控循環單元時間序列預測對比效果一覽基本介紹模型搭建程序設計參考資料 效果一覽 基本介紹 1.MATLAB實現EEMD-GRU、GRU時…

springcloud+nacos實現灰度發布

灰度發布 gateway網關實現灰度路由 灰度發布實體 package com.scm.boss.common.bean;import lombok.Data; import lombok.experimental.Accessors;import java.io.Serializable;/*** 灰度發布實體*/ Data Accessors(chain true) public class GrayBean implements Serializ…

【Linux】—— 進程程序替換

目錄 序言 &#xff08;一&#xff09;替換原理 1、進程角度——見見豬跑 1?? 認識 execl 函數 2、程序角度——看圖理解 &#xff08;二&#xff09;替換函數 1、命名理解 2、函數理解 1??execlp 2??execv 3??execvp 4??execle 5??execve 6??execve…

機器學習重要內容:特征工程之特征抽取

目錄 1、簡介 2、?為什么需要特征工程 3、特征抽取 3.1、簡介 3.2、特征提取主要內容 3.3、字典特征提取 3.4、"one-hot"編碼 3.5、文本特征提取 3.5.1、英文文本 3.5.2、結巴分詞 3.5.3、中文文本 3.5.4、Tf-idf ?所屬專欄&#xff1a;人工智能 文中提…