【100天精通python】Day28:文件与IO操作_JSON文件处理

news2024/11/28 12:48:58

 目录 

专栏导读 

1. JSON数据格式简介

1.1 示例JSON数据

1.2 JSON文件的特点 

2 json模块的常用操作

2.1 读写JSON文件的示例

2.2 解析JSON字符串

2.3 修改JSON数据

 2.4 查询和操作嵌套数据

2.5 处理包含特殊字符的JSON文件

2.6 处理日期和时间 

2.7 处理大型JSON文件

2.8 格式化输出

2.9 处理嵌套结构和深层次的JSON

2.10 JSON文件读取失败如何处理

3 json 文件格式转换

3.1 JSON转换为CSV

3.2 JSON转换为XML

3. 3 JSON转换为YAML

3.4 CSV/XML/YAML转换为JSON

4 CSV/XML/YAML转换为JSON

4.1 CSV转换为JSON

4.2 XML转换为JSON

4.3 YAML转换为JSON


专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html

1. JSON数据格式简介

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于数据的存储和交流。它易于人类阅读和编写,同时也易于机器解析和生成。JSON的主要特点包括:

        基本结构:JSON由键值对构成,键和值之间使用冒号分隔,不同的键值对之间使用逗号分隔。JSON的数据结构可以嵌套,从而构建出复杂的数据结构。 

        数据类型:JSON支持多种数据类型,包括:

  • 对象(Object):由花括号 {} 包裹,包含键值对,键是字符串,值可以是字符串、数字、布尔值、对象、数组等。
  • 数组(Array):由方括号 [] 包裹,包含多个值,值可以是字符串、数字、布尔值、对象、数组等。
  • 字符串(String):使用双引号 " 包裹,可以包含任何Unicode字符。
  • 数字(Number):可以是整数或浮点数。
  • 布尔值(Boolean):表示真或假。
  • 空值(Null):表示空值或缺失数据。

1.1 示例JSON数据

{
  "name": "John",
  "age": 30,
  "is_student": false,
  "hobbies": ["reading", "swimming"],
  "address": {
    "street": "123 Main St",
    "city": "Cityville"
  }
}

1.2 JSON文件的特点 

  1. 易于阅读:JSON的结构清晰,容易阅读和理解,适用于人类和机器之间的交互。

  2. 跨平台性:JSON是一种与编程语言和平台无关的格式,因此适用于不同语言和操作系统之间的数据交换。

  3. 用途广泛:JSON在网络传输、配置文件、API交互、日志记录等领域都有广泛的应用。

JSON的简洁性和可读性使其成为当今应用程序和系统之间数据交换的首选格式之一。无论是在前端和后端的开发中,还是在数据处理和存储中,都可以使用JSON来方便地表示和传递数据。

2 json模块的常用操作

  json模块提供了两个主要函数:json.dumps()用于将Python对象转换为JSON格式的字符串,json.loads()用于将JSON格式的字符串解析为Python对象。此外,还有用于读写JSON文件的函数:json.dump()用于将Python对象写入JSON文件,json.load()用于从JSON文件读取数据并将其转换为Python对象。

2.1 读写JSON文件的示例

        下面是一个简单的示例,演示如何使用json模块读写JSON文件:

import json

# 要写入JSON文件的数据
data = {
    "name": "Alice",
    "age": 25,
    "is_student": True,
    "hobbies": ["painting", "gardening"],
    "address": {
        "street": "456 Elm St",
        "city": "Townsville"
    }
}

# 将数据写入JSON文件
with open("data.json", "w") as json_file:
    json.dump(data, json_file, indent=4)  # indent用于美化输出

# 从JSON文件读取数据
with open("data.json", "r") as json_file:
    loaded_data = json.load(json_file)

# 打印读取的数据
print(loaded_data)

        在这个示例中,我们首先将一个Python字典写入名为"data.json"的JSON文件中,然后再从该文件中读取数据并将其加载为Python对象。加载的数据与原始数据相同,以字典的形式存储在loaded_data变量中。

2.2 解析JSON字符串

使用json.loads()函数可以将JSON格式的字符串解析为Python字典或列表。

import json

json_string = '{"name": "Bob", "age": 30}'
data = json.loads(json_string)

2.3 修改JSON数据

读取JSON数据后,你可以对其进行修改,然后再写回JSON文件。

import json

with open("data.json", "r") as json_file:
    data = json.load(json_file)

# 修改数据
data["age"] = 28

with open("data.json", "w") as json_file:
    json.dump(data, json_file, indent=4)

 2.4 查询和操作嵌套数据

当JSON数据有嵌套结构时,你可以使用字典或列表的方式查询和操作内部数据。

import json

with open("data.json", "r") as json_file:
    data = json.load(json_file)

# 查询嵌套数据
city = data["address"]["city"]
hobbies = data["hobbies"]

# 修改嵌套数据
data["address"]["city"] = "New City"
data["hobbies"].append("cooking")

2.5 处理包含特殊字符的JSON文件

有时,JSON文件中可能包含特殊字符(如Unicode转义字符)或不可打印字符。在读取和处理这些文件时,你可能需要进行解码和处理。

import json

with open("special_chars.json", "r", encoding="utf-8") as json_file:
    raw_data = json_file.read()
    cleaned_data = raw_data.encode("utf-8").decode("unicode_escape")

parsed_data = json.loads(cleaned_data)
print(parsed_data)

2.6 处理日期和时间 

import json
from datetime import datetime

data_with_dates = {
    "event": "birthday",
    "date": "2023-08-07T15:30:00Z"
}

date_string = data_with_dates["date"]
parsed_date = datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ")
print(parsed_date)

2.7 处理大型JSON文件

对于大型JSON文件,可能需要逐行读取和处理,以减少内存占用。

import json

with open("large_data.json", "r") as json_file:
    for line in json_file:
        data = json.loads(line)
        # 处理每一行的数据

2.8 格式化输出

使用json.dump()时,可以设置indent参数来美化输出,使其更易读。

import json

data = {
    "name": "Alice",
    "age": 25,
    "hobbies": ["painting", "gardening"]
}

with open("output.json", "w") as json_file:
    json.dump(data, json_file, indent=4)

2.9 处理嵌套结构和深层次的JSON

        当JSON数据具有深层次的嵌套结构时,访问和处理特定数据可能变得复杂。你可以使用递归方法来处理深层次的嵌套结构。

def get_value(data, target_key):
    if isinstance(data, dict):
        for key, value in data.items():
            if key == target_key:
                return value
            if isinstance(value, (dict, list)):
                result = get_value(value, target_key)
                if result is not None:
                    return result
    elif isinstance(data, list):
        for item in data:
            result = get_value(item, target_key)
            if result is not None:
                return result

    return None

# 示例JSON数据
nested_data = {
    "person": {
        "name": "Alice",
        "address": {
            "street": "123 Elm St",
            "city": "Townsville"
        }
    }
}

target_value = get_value(nested_data, "city")
print(target_value)  # 输出:Townsville

2.10 JSON文件读取失败如何处理

 无法成功读取JSON文件内容,导致json.load()函数报错。

确保文件路径正确,文件存在且可读。检查文件编码是否正确,通常使用utf-8编码。

import json

try:
    with open("data.json", "r", encoding="utf-8") as json_file:
        data = json.load(json_file)
except FileNotFoundError:
    print("JSON file not found.")
except json.JSONDecodeError:
    print("Error decoding JSON data.")

3 json 文件格式转换

3.1 JSON转换为CSV

        CSV(Comma-Separated Values)是一种以逗号分隔字段的文本文件格式。你可以使用Python的csv模块将JSON数据转换为CSV格式。

import json
import csv

with open("data.json", "r") as json_file:
    data = json.load(json_file)

with open("data.csv", "w", newline="") as csv_file:
    csv_writer = csv.writer(csv_file)
    # 写入表头
    csv_writer.writerow(data[0].keys())
    # 写入数据
    for item in data:
        csv_writer.writerow(item.values())

3.2 JSON转换为XML

        XML(eXtensible Markup Language)是一种标记语言,用于表示结构化数据。你可以使用Python的第三方库(如xmltodict)将JSON数据转换为XML格式。

import json
import xmltodict

with open("data.json", "r") as json_file:
    data = json.load(json_file)

xml_data = xmltodict.unparse({"root": data})
with open("data.xml", "w") as xml_file:
    xml_file.write(xml_data)

3. 3 JSON转换为YAML

        YAML(YAML Ain't Markup Language)是一种可读性高的数据序列化格式。你可以使用Python的pyyaml库将JSON数据转换为YAML格式。

import json
import yaml

with open("data.json", "r") as json_file:
    data = json.load(json_file)

with open("data.yaml", "w") as yaml_file:
    yaml.dump(data, yaml_file, default_flow_style=False)

3.4 CSV/XML/YAML转换为JSON

        同样地,你可以将CSV、XML和YAML文件转换为JSON格式,具体方法取决于所用的库。例如,使用csvxmltodictpyyaml等库可以进行相应的转换。

4 CSV/XML/YAML转换为JSON

4.1 CSV转换为JSON

import csv
import json

csv_file_path = "data.csv"
json_file_path = "data_from_csv.json"

data = []

with open(csv_file_path, "r") as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        data.append(row)

with open(json_file_path, "w") as json_file:
    json.dump(data, json_file, indent=4)

4.2 XML转换为JSON

假设你有一个XML文件 data.xml

<root>
    <item>
        <name>John</name>
        <age>30</age>
    </item>
    <item>
        <name>Alice</name>
        <age>25</age>
    </item>
</root>

下面是将XML转换为JSON的示例代码:

import xmltodict
import json

xml_file_path = "data.xml"
json_file_path = "data_from_xml.json"

with open(xml_file_path, "r") as xml_file:
    xml_data = xml_file.read()
    json_data = json.dumps(xmltodict.parse(xml_data), indent=4)

with open(json_file_path, "w") as json_file:
    json_file.write(json_data)

4.3 YAML转换为JSON

假设你有一个YAML文件 data.yaml

- name: John
  age: 30
- name: Alice
  age: 25

下面是将YAML转换为JSON的示例代码:

import yaml
import json

yaml_file_path = "data.yaml"
json_file_path = "data_from_yaml.json"

with open(yaml_file_path, "r") as yaml_file:
    yaml_data = yaml.safe_load(yaml_file)
    json_data = json.dumps(yaml_data, indent=4)

with open(json_file_path, "w") as json_file:
    json_file.write(json_data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【web逆向】全报文加密及其登录流程的分析案例

aHR0cHM6Ly9oZWFsdGguZWxkZXIuY2NiLmNvbS9zaWduX2luLw 涉及加密库jsencrypt 定位加密点 先看加密的请求和响应&#xff1a; 全局搜索加密字段jsondata&#xff0c;这种非特定参数的一般一搜一个准&#xff0c;搜到就是断点。起初下的断点没停住&#xff0c;转而从调用栈单步…

MySQL—— 基础语法大全

MySQL—— 基础 一、MySQL概述1.1 、数据库相关概念1.2 、MySQL 客户端连接1.3 、数据模型 二、SQL2.1、SQL通用语法2.2、SQL分类2.3、DDL2.4、DML2.5、DQL2.6、DCL 三、函数四、约束五、多表查询六、事务 一、MySQL概述 1.1 、数据库相关概念 数据库、数据库管理系统、SQL&a…

谈谈DNS是什么?它的作用以及工作流程

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、DNS是什么&#xff1f; 二、DNS的作用 三、DNS查询流程 1、查看浏览器缓存 2、查看系统缓存 3、查看路由器缓存 4、查看ISP …

arcgis栅格数据之最佳路径分析

1、打开arcmap&#xff0c;加载数据&#xff0c;需要对影像进行监督分类&#xff0c;如下&#xff1a; 这里任选一种监督分类的方法&#xff08;最大似然法&#xff09;&#xff0c;如下&#xff1a; 这里会先生成一个.ecd文件&#xff0c;然后再利用.ecd文件对影像进行分类。如…

论 SoC上的Linux如何拉动外部I/O

在MCU中&#xff08;如classic autosr或其他RTOS&#xff09;&#xff0c;一般可以直接通过往对应的寄存器&#xff08;地址转为指针&#xff09;写值&#xff0c; 或者调用一些硬件抽象层或者驱动接口来拉动芯片提供的GPIO。 但是在Linux中&#xff0c;可能不会让应用层直接去…

[CKA]考试之查看pod的cpu

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 找出标签是namecpu-loader的Pod&#xff0c;并过滤出使用CPU最高的Pod&#…

MCUXpresso for VS Code -- 基于VSCode开发RT1176

MCUXpresso for VS Code 是nxp推出插件&#xff0c;旗下MCX LPC, Kinetis和i.MX rt等MCU&#xff0c;都能在VS Code平台进行嵌入式开发。功能框图如下&#xff1a; 前期准备&#xff1a; 软件环境: windows(实际可以跨系统&#xff0c;linux和mac没有测试) VS Code ninja CMa…

LeetCode 热题 100 JavaScript--206. 反转链表

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} head* return {ListNode}*/1、逐个断键&#xff0c;将后一个节点放到前面 …

C语言笔试训练【第四天】

文章目录 1、设变量已正确定义&#xff0c;以下不能统计出一行中输入字符个数&#xff08;不包含回车符&#xff09;的程序段是&#xff08; &#xff09; 2、运行以下程序后&#xff0c;如果从键盘上输入 65 14<回车> &#xff0c;则输出结果为&#xff08; &#xff0…

centos7 yum源安装出错及更新问题

如下 首先&#xff0c;在搜索jdk时报错如下&#xff1a; 解决办法 1、进入 yum的repo目录 cd /etc/yum.repos.d/2、修改所有的CentOS文件内容 sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vau…

《南方都市报》:大众点评等互联网平台陷医美虚假“种草”质疑,或涉嫌违规广告

植发、整容&#xff0c;正在走向大众。近日&#xff0c;“妈妈带高考结束女儿整容提升自信”“长沙学生族暑假扎堆整容”等多个相关话题冲上热搜&#xff0c;学生整形热引发广泛关注。 爱美之心&#xff0c;人皆有之&#xff0c;当下早不是谈整容色变的时候&#xff0c;有人在…

【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别

文章目录 1、概述2、BN层3、LN层4、Pytorch的实现5、BN层和LN层的对比 1、概述 归一化(Normalization) 方法&#xff1a;指的是把不同维度的特征&#xff08;例如序列特征或者图像的特征图等&#xff09;转换为相同或相似的尺度范围内的方法&#xff0c;比如把数据特征映射到[…

IO学习-有名管道

1&#xff0c;要求实现AB进程对话 A进程先发送一句话给B进程&#xff0c;B进程接收后打印 B进程再回复一句话给A进程&#xff0c;A进程接收后打印 重复1.2步骤&#xff0c;当收到quit后&#xff0c;要结束AB进程 运行结果&#xff1a;

【面试八股文】每日一题:谈谈你对集合的理解

每日一题-Java核心-谈谈你对集合的理解【面试八股文】 谈谈你对集合的理解 Java集合是Java编程语言中用于存储数据的容器。它提供了一系列的类和接口&#xff0c;用于操作和管理数据集合。Java集合框架主要包括以下几个重要的接口和类&#xff1a; List&#xff1a;List是一个有…

掌握 JVM 调优命令

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM 日常调优总结起来就是&#xff1a;首先通过 jps 命令查看当前进程&#xff0c;然后根据 pid 通过 jinfo 命令查看和修改 jvm 参数&#xff0c;通过 jstat 命令查看 cla…

火力全开!百度文心3.5三大维度、20项指标国内问鼎!

近日&#xff0c;清华大学新闻与传播学院沈阳团队发布《大语言模型综合性能评估报告》&#xff08;下文简称“报告”&#xff09;&#xff0c;报告显示百度文心一言在三大维度20项指标中综合评分国内第一&#xff0c;超越ChatGPT&#xff0c;其中中文语义理解排名第一&#xff…

8.7一日总结

后台管理项目(使用vue3) 1.创建项目 npm init vuelatest 2.进入项目,下载依赖 3.下载需要的项目依赖 下载重置样式表 npm install reset-css 在main.js中阴入 import reset-css 4.清理目录 将项目中不需要的内容删除 5.运行项目 npm run dev 6.将仓库推送…

Kubectl 详解

目录 陈述式资源管理方法:项目的生命周期:创建-->发布-->更新-->回滚-->删除声明式管理方法:陈述式资源管理方法: kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将…

线程池优雅关闭

背景 线程池是日常我们写代码时经常打交道的知识点了&#xff0c;围绕线程池除了core核心线程数和最大max线程数的知识点外&#xff0c;我们一般会忽略然而却绕不开的问题时如何关闭线程池 如何关闭线程池 首先从优雅关闭线程池代码说起&#xff1a; public boolean graful…

在oracle SQL中创建返回表的函数

这是我的职责 create or replace FUNCTION split(i_str IN VARCHAR2,i_delim IN VARCHAR2 DEFAULT : ) RETURN TABLE AS BEGINRETURN SELECT trim(regexp_substr(i_str, [^||i_delim||], 1, LEVEL)) str FROM projetCONNECT BY instr(i_str, i_delim, 1, LEVEL - 1) …