excel填数据转json格式

这篇具有很好参考价值的文章主要介绍了excel填数据转json格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定制化比较严重,按需更改

excel文件如下

excel填数据转json格式,python,excel,json,python

 代码

# -*- coding: utf-8 -*-
import oss2
import shutil
import sys
import xlwt
import xlrd
import json
from datetime import datetime, timedelta
 
file1 = "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.ncols

json_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 re


def 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 temp
    return 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" + content
    else:
        return content

def 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):
            # 第一行就遇到key
            if type == 'array':
                print("第"+(row_index+1)+"行格式不对")
                break
            else:
                temp = {}
                data[key] = temp
                if 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)
                continue

        column_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 == '':
                break
            column_name_arr.append(name_convert_to_camel(column_name))
        if type == 'object':
            temp = {}
            data[key] = temp
            for 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] = tempArr
            arr_data_start = cur_level_key_row[index]+2
            arr_data_end = rowNum # 默认,下面会改
            next_key_index_temp = rowNum
            if (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_temp
            else:
                for i_temp in range(arr_data_start, next_key_index_temp):
                    if i_temp == rowNum-1:
                        break
                    if (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+1
                        break

            for chi_row_index in range(arr_data_start, arr_data_end):
                colValue = getCellValue(chi_row_index, cur_level)
                if colValue == '':
                    continue
                temp = {}
                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"
            }
        ]
    }
}文章来源地址https://www.toymoban.com/news/detail-658837.html

到了这里,关于excel填数据转json格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Python】-- python与json数据格式的转换

    什么是json? json是一种轻量级的数据交互格式,可以按照json指定的格式去组织和封装数据。 json主要功能 json是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递与交互。 json的作用 为了让不同的语言都能相互通用的传递数据,json是一种很好的中转数据

    2024年02月11日
    浏览(12)
  • Python 中的 JSON 操作:简单、高效的数据交换格式

    在现代的数据交换和存储中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,备受青睐。它不仅易于阅读和理解,还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件,实现数据的序列化和反序列化。 JSON 格式采用键值对的方式表达信息

    2024年02月10日
    浏览(12)
  • Python:使用openpyxl读取Excel文件转为json数据

    Python:使用openpyxl读取Excel文件转为json数据

    openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files 文档 https://openpyxl.readthedocs.io/en/stable/ https://pypi.org/project/openpyxl/ 安装 环境 读取文件示例:将Excel文件读取为json数据 有如下一个文件 data.xlsx 实现代码 输出读取的json数据 读写示例

    2024年02月15日
    浏览(15)
  • Python小白入门:文件、异常处理和json格式存储数据

    Python小白入门:文件、异常处理和json格式存储数据

    所用资料 代码中所用到的文件可以从下面的网站进行下载: https://www.ituring.com.cn/book/2784 open函数 打开 一个文件。 接收参数为需要打开的文件名 。Python会在 当前执行的文件所在目录下 查找指定文件,因此需要把pi_digits.txt文件放在执行文件的同目录下。 open函数返回一个表示

    2024年02月13日
    浏览(9)
  • Excel将单元格中的json本文格式化

    打开Excel文件并按下ALT + F11打开Visual Basic for Applications(VBA)编辑器。 输入下面的代码 进入https://github.com/VBA-tools/VBA-JSON,下载release的最新代码 VBA编辑器,“文件”-“导入”, 导入文件 JsonConverter.bas 点击VBA编辑器的菜单栏上的\\\"工具\\\"。 选择\\\"引用\\\",然后在弹出的对话框中找到

    2024年02月14日
    浏览(11)
  • <九> objectARX开发:读写Excel、json与txt格式文件

    <九> objectARX开发:读写Excel、json与txt格式文件

      在实际应用中,有时候我们需要通过文本格式或者表格等格式来传递数据,例如*.txt、Excel表格或者*.json文件。此时我们就需要想办法来读写这些数据。本节我们来说一下如何读写读写Excel、json与txt格式文件。 2.1 读写Excel   excel文件的读写有多种方式来实现,这里我们

    2024年02月09日
    浏览(10)
  • python excel复制数据保留单元格格式(.xls.xlsx)

    python excel复制数据保留单元格格式(.xls.xlsx)

    最近帮朋友开发一个数据excel根据条件动态过率的功能.读取生成用pandas很方便,但是这里有一点比较麻烦的是得保留原来的单元格格式.这点操作起来就要麻烦一点了.下面总结了.xlsx和.xls处理 xlsx文件处理可以使用openpyxl库进行处理,比较简单,流程如下 1.获取原来的数据cell 2.进行

    2024年02月03日
    浏览(17)
  • Python自动化测试用例:如何优雅的完成Json格式数据断言

    Python自动化测试用例:如何优雅的完成Json格式数据断言

    目录 前言 直接使用 优化 封装 小结 进阶 总结  资料获取方法 记录Json断言在工作中的应用进阶。 很早以前写过一篇博客,记录当时获取一个多级json中指定key的数据: 后来在写用例生成过程中,发现重复的断言描述信息较多,大多数数据返回其实都是标准的json,所以将整个

    2024年02月13日
    浏览(9)
  • python熟悉python基础语法,了解html网络结构,了解json格式数据,含有字符串

    python熟悉python基础语法,了解html网络结构,了解json格式数据,含有字符串

    Python网络爬虫是利用Python编写的程序,通过自动化地访问网页、解析html或json数据,并提取所需信息的技术。下面将详细介绍一些与Python网络爬虫相关的重要知识点。   变量和数据类型:学习如何声明变量以及Python中的常用数据类型,如数字、字符串、列表、字典等。 条件语

    2024年02月10日
    浏览(10)
  • 使用Pydantic将Python对象转换为其他数据格式,例如JSON、XML、YAML

    更多文章:技数未来 Pydantic是一个在Python中的数据验证和解析库。它可以将Python对象转换成其他数据格式,如JSON、XML和YAML。在使用Pydantic之前,我们需要进行一些准备工作: 1. 安装Python和pip:确保你的计算机上安装了Python以及pip包管理器。 2. 创建虚拟环境(可选):建议使

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包