Python代码实现Excel转JSON

Python代码实现Excel转JSON题记项目需求需要用到Excel转JSON,第一时间想到的就是尘封了将近一年的python,一直在JavaJava,python早忘光了,想立刻开始动手却又不敢,最后确认,用python来完成操作Excel有得天独厚的优势,只能硬着头皮上了。短短的代码,做了将近四个小时,中间复习了一下字典和列表,同时也因为其中遇到了一些奇奇怪怪的问题,凌晨一点多躺下,一身轻松。主要技术python3.8.6+字典/列表的运用+对Excel操作的库pandas其中python对Excel操作的库其实有很多,像我

大家好,又见面了,我是你们的朋友全栈君。

题记

项目需求需要用到Excel转JSON,第一时间想到的就是尘封了将近一年的python,一直在JavaJava,python早忘光了,想立刻开始动手却又不敢,最后确认,用python来完成操作Excel有得天独厚的优势,只能硬着头皮上了。短短的代码,做了将近四个小时,中间复习了一下字典和列表,同时也因为其中遇到了一些奇奇怪怪的问题,凌晨一点多躺下,一身轻松。

主要技术

python 3.8.6 + 字典/列表的运用 +对Excel操作的库pandas

其中python对Excel操作的库其实有很多,像我以前也用过xlrdxlwtopenpyxl等等等,但也各有优缺点吧,有的mac和win不兼容,而像pandas只支持加载表的单个sheet,但在这个工作任务中够用了,大家如果需要对Excel进行操作,可以根据项目/任务需求选择,这边不再赘述。但对Excel转JSON而言,无论用什么库,其核心都是对列表和字典的运用

Excel部分数据展示

在这里插入图片描述

希望效果

由门类到专业类到专业的JSON数据

最终的代码实现

import pandas as pd
import json

data = pd.read_excel(r'/Users/wanglingyi/Desktop/Excel转json/2020本科专业目录.xlsx',sheet_name='汇总')

json_list = []
for name in data['门类'].unique():                           #选门类 
    name_dict={ 
   }                    #建立该门类的字典,存储该门类的名字和专业类及其信息 
    name_dict['name'] = name                                 #存储门类名字 
    name_options = []                                        #准备存储信息 
    name_data = data[data['门类']==name]                     #数据降级 
    #print(name_data) #逐层检查数据是否正确

    for kind in name_data['专业类'].unique():                 #选专业类 
        kind_dict={ 
   }                                         #建立专业类字典,放专业类名字和信息 
        kind_dict['name'] = kind                             #存储专业类名字 
        options = []                                       	 #准备存储信息
        kind_data = name_data[name_data['专业类']==kind]      #数据降级
        #print(kind_data) #逐层检查数据是否正确
        
				#定专业,专业代码唯一,所以不再限定
        for code in kind_data['专业代码']:                            
            #根据上面推出要找代码一样的数据
            code_data = kind_data[kind_data['专业代码']== code ]       
            info = { 
   }                                      #取数据
            info['code'] = code                                      
            for name in code_data['专业名称']:
                info['name'] = name
            for grant in code_data['学位授予门类']:
                info['grant'] = grant
            for years in code_data['修业年限']:
                info['years'] = years
            #print(info) #逐层检查数据是否正确
            options.append(info)
            #print(options) #逐层检查数据是否正确

        kind_dict['options'] = options                   #填充数据
        name_options.append(kind_dict)

    name_dict['options'] = name_options
    json_list.append(name_dict) 
    #print(json_list) #展示结果(先预览看一下)

#确定结果格式正确后以文件形式输出
json_dict = { 
   }
json_dict['data'] = json_list
data_dict = json.dumps(json_dict, ensure_ascii=False)
with open('data.json','w') as f_w:
        f_w.write(data_dict)
        

部分结果展示(已经通过JSON在线预览器美化)

{ 
   
  "data": [
    { 
   
      "name": "哲学",
      "options": [
        { 
   
          "name": "哲学类",
          "options": [
            { 
   
              "code": "010101",
              "name": "哲学",
              "grant": "哲学",
              "years": "四年"
            },
            { 
   
              "code": "010102",
              "name": "逻辑学",
              "grant": "哲学",
              "years": "四年"
            },
            { 
   
              "code": "010103K",
              "name": "宗教学",
              "grant": "哲学",
              "years": "四年"
            },
            { 
   
              "code": "010104T",
              "name": "伦理学",
              "grant": "哲学",
              "years": "四年"
            }
          ]
        }
      ]
    }
   ]
} .........

原文件展示
原文件展示

注意事项

1.理清json数据结构关系

2.注意文件路径前的 r(可以去掉试试会发生什么)

3.可以逐层打印每个数据,看看是否符合格式,从而避免从头到尾都是错的。这就是为什么我在代码中出现了很多**#print()**。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137516.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • a4如何打印双面小册子_a4如何打印双面小册子[通俗易懂]

    a4如何打印双面小册子_a4如何打印双面小册子[通俗易懂]展开全部1、在Word中打开一篇文档,点击“文件”——“打印”菜单项,准备开始打印工作。2、弹出“32313133353236313431303231363533e4b893e5b19e31333433623230打印”对话框,在“打印机”名称框的左侧,点击“属性”按钮,点击此按钮,开始设置小册子打印。3、弹出打印机属性对话框,在“双面打印”部分,点击下拉菜单,选择“双面打印,短边“装订。(目…

    2022年9月6日
    3
  • .net 4.0 ValidateRequest=”false” 无效「建议收藏」

    .net 4.0 ValidateRequest=”false” 无效「建议收藏」
    当你在安装了.NETFramework4.0以上版本后,当你的应用程序以.NETFramework4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括WebServices等各种HTTP请求,不仅仅针对aspx页面,也针对HTTPHandler,HTTPModule等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。
       问题的解决方案就是在全局级别(

    2022年6月6日
    32
  • STM32CubeMX 真的不要太好用

    STM32CubeMX 真的不要太好用STM32CubeMX真的不要太好用由于工作内容的变动,我已经很久没有正经的玩过单片机了,近期又要用它做个小玩意了,还是选stm32吧,外设库开发不要太方便,哈哈哈先去stm32社区逛了逛,发现了一个新字眼STM32CubeMX,简单看了下,大概明白是个ST公司新推出的一个配置工具,直接由图形界面简单配置下,生成初始化代码,并对外设做了进一步的抽象,让开发人员更只专注应用的开发…

    2022年5月5日
    183
  • C++学习之路——函数重载和运算符重载

    C++学习之路——函数重载和运算符重载一、函数重载C++允许在同一作用域中的某个函数和运算符指定多个定义,分 别称为函数重载和运算符重载重载声明是指一个与之前已经在该作用域内声明过的函数或方法 具有相同名称的声明,但是它们的参数列表和实现不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。C++中的函数重…

    2022年8月18日
    3
  • pstack 安装linux_Linux下pstack的实现

    pstack 安装linux_Linux下pstack的实现Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。Linux下这个工具叫做pstack.使用方法是#pstackUsage:pstack当然这个被调查的程序需要有符号信息。比较雷人的是这个程序竟然是个shell脚本,核心实现是gdb的threadapplyal…

    2022年9月14日
    0
  • drupal教程 Drupal安装指南

    drupal教程 Drupal安装指南译者:老葛从开始学习Drupal到现在,安装的都是5.1,5.2的版本,由于使用的是wdp开发工具,所以安装基本上不需要做什么的,大概都是建立数据库名,修改一下settings.php配置文件,在浏览器里面敲入install.php,就可以自动完成安装了。所以说,drupal的安装是极其简单的,而且很容易上手。  但是由于客户的要求,需要使用drupal4.7的版本,由于用过5.1+的版

    2022年5月2日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号