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()**。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IDEA快捷键设置复制上一行

    IDEA快捷键设置复制上一行Idea真是的一个神奇的ide,用着爱不择手。之前用习惯了eclipse的“ctrl+向下箭头”,复制一行,如何设置idea里这个快捷键呢File->settings->keymap->搜索duplicate->双击DuplicateEntireLines设置一下,搞定,又可以很爽的用ctrl+向下箭头复制一行了虽说以上的一种解决方法,但是经…

  • 华为AAA认证详解

    华为AAA认证详解 AAA的基本构架 AAA通常采用“客户端—服务器”结构。这种结构既具有良好的可扩展性,又便于集中管理用户信息。如图1所示。 图1AAA的基本构架示意图  认证    不认证:对用户非常信任,不对其进行合法检查,一般情况下不采用这种方式。    本地认证:将用户信息配置在网络接入服务器上。本地认证的优点是速度快,可以为运营降低成本,缺点是存储信息量受设备硬件条…

  • C#之 对象数组

    C#之 对象数组对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了。万物皆可对象,举个例子:一台电脑。我们就可以把电脑看成一个对象。第一种:常规的写法string[]xxx={}例如我们写一个名字集合的数组:string[]name=newstring[]{“小白”,”小黑”,”小明”};//可以简写为:tring[]nam…

  • iPhone各机型屏幕尺寸

    iPhone各机型屏幕尺寸机型 尺寸 点(Point) pixel iPhone4/4s 3.5英寸 320×480 960×640 iPhone5/5s/SE 4.0英寸 320×568 640×1136 iPhone6/6s/7/8 4.7英寸 375×667 750×1334 iPhone6p/6sp/7p/8p 5.5英寸 414×736 1242×2208 iPhoneX/…

  • UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)[通俗易懂]

    UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)[通俗易懂]目录类图关系概述面向对象是符合人们对现实世界的思维模式,利用面向对象设计,特别是采用各种设计模式来解决问题时,会设计多个类,然后创建多个对象,一个设计良好的类,应该是兼顾信息和行为并且高内聚。而不同的类之间,应该做到松耦合。当面对应用系统或者需要解决的问题经常是复杂的、高度抽象的,我们创建的多个对象往往是有联系的,通常对象之间的关系可以分为以下几类:泛化关系实现关系依赖关…

  • selenium python面试题_selenium面试题

    selenium python面试题_selenium面试题selenium中如何判断元素是否存在?selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断。#判断元素是否存在try:dr.find_element_by_id(‘none’)exceptNoSuchElementException:print’elementdoesnotexist’selenium中hidden或者是display=…

发表回复

您的电子邮箱地址不会被公开。

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