复习Python第八节之json数据

2023-11-16

目录

JSON数据学习

1.数据交换

2.json语法:              

 1). 什么是json?

2).json的库函数:

3).dumps()与dump()以及loads()与load()函数之间的差别:

4). Json来模拟以下数据库,文本文档当作数据库:

5).使用json案例实现记账本(dumps()与loads()文本文档进行写入写出):


JSON数据学习

1.数据交换


              网站后台代码的数据,如何传到前端网页?

              答:通过数据库

            不同语言平台的程序,如何实现数据传输?

              答:可以通过设定一种中间格式json ,java与python都可以转化这个格式。

2.json语法:              

 1). 什么是json?

     JSON 是用于存储和交换数据的语法。JSON (JavaScript Object Notation)最初是用 JavaScript 对象表示法编写的文本,但随后成为了一种常见格式,被包括Python在内的众多语言采用。

 Json使用键值对的方式表示一个业务对象(类似于字典)。

 {"键1":"值1","键2":"值2","键3":"值3"....} 多个业务对象使用 列表[ ]包含:[{…},{…},{…},{…},…]

 import json5   ,我这个是json5版本

2).json的库函数:

方法 作用
json.dumps() 将python对象编码成Json字符串
json.loads() 将Json字符串解码成python对象
json.dump() 将python中的对象转化成json储存到文件中
json.load() 将文件中的json的格式转化成python对象提取出来

3).dumps()与dump()以及loads()与load()函数之间的差别:

dumps()与dump()在转化成json对象,跟文件结合写入文件。前者是生成字符串,后者是生成字符流(文本文档)。

loads()是针对内存对象、load()针对文件 ,都是将string转换为dict,同文件结合读出文件。

具体查看请查看末尾的链接(大佬的总结)。

下面是dumps()与loads() 的使用: 

#1.json转python(转成字典或者列表嵌套字典)
#这就把我们储存在txt文件里面的json格式的内容读取出来了。
jsonData='{"name": "zhangsan" , "age":18,"hobby" : "play"}'
pythonData=json5.loads(jsonData)   #load方法
print(pythonData)

  结果是: 

{'name': 'zhangsan', 'age': 18, 'hobby': 'play'}
#ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。
#这个方法结合了文件的操作,把转换后的json储存在了文件里。
pdata='{"name":"zzz","play":"跑步"}'
jsond=json5.dumps(pdata,ensure_ascii=False)
print(jsond,type(pdata))

  结果是:

"{\"name\":\"zzz\",\"play\":\"跑步\"}" <class 'str'>

4). Json来模拟以下数据库,文本文档当作数据库:

首先往文本文档中写数据:

#写数据
with open (r"user.txt","w") as f:
    users='[{"uname": "zhangsan", "upwd": "123"}, {"uname": "lisi", "upwd": "123"}, ' \
          '{"uname": "wangwu", "upwd": "123"}, {"uname": "大宝", "upwd": "234"}]'
    f.write(users)

读文件并实现一个登录:

import json5
def readd():
    with open(r"user.txt","r") as f:
        jsond=f.read()
    userlist=json5.loads(jsond)
    return userlist
def login():
    msg="失败"
    name=input("请输入用户名:")
    password=input("请输入密码:")
    userlist=readd()
    for user in userlist:
        if name==user['uname'] and  password ==user['upwd']:
            msg="成功"
            print("恭喜登录成功")
    if msg=="失败" :
        print("登录失败")
    return msg
if __name__=='__main__':
    login()

       

  比上一个完整一下(读写以及其他操作,就当复习了)没有实现修改到文本文档中。

import json5

#读数据
def readd():
    with open(r"user.txt","r") as f:
        jsond=f.read()
    userlist=json5.loads(jsond)
    return userlist
#写数据(修改)
def writedata(xgname):
    userlist = readd()
    for user in userlist:
        if xgname== user['uname']:
            print(user)
            user["upwd"]=input("请输入你要修改得密码:")
            print(userlist)
        else:
            pass
           
def login():
    msg = "失败"
    name = input("请输入用户名:")
    password = input("请输入密码:")
    userlist = readd()
    for user in userlist:
        if name == user['uname'] and password == user['upwd']:
            msg = "成功"
            print("恭喜登录成功")
    if msg == "失败":
        print("登录失败")
    return msg,name

def main1():
    choice1=int(input("0代表登录,1代表创建新用户,其他任意键为退出:"))
    if choice1 ==0:
        msg,name=login()
        if msg=="成功":
            print("开始你的使用")
            choice2 = int(input("如果修改密码请按1:"))
            if choice2==1:
                writedata(name)
    elif choice1==1:
        reg()
    else:
        exit()
def reg():
    name=input("请输入新的用户:")
    password=input("请输入密码:")
    newuser={"uname":name,"upwd":password}
    userlist=readd()
    userlist.append(newuser)
    print(userlist)
if __name__=='__main__':
    main1()

5).使用json案例实现记账本(dumps()与loads()文本文档进行写入写出):

实现很简单的思想,每一次写入都是重写。

初始化数据,先让文件存在点数据。注意:一个文本文件中只能保存一种业务对象。

d='[{"时间": "2021/03/04 15:20:21", "项目": "收到王敏货款", "金额": 20000, "分类": "收入"}]'
with open(r"data.txt","w") as f:
		f.write(d)

再进行写入写出:

#初始数据一定要通过程序写入
#一个文本文件中只能保存一种业务对象

import json5
import datetime
import time
#读json数据
def readData():
	with open(r"data.txt","r") as f:
		jsonData=f.read()
	dataList=json5.loads(jsonData)
	return dataList

#写json数据
def writeData(dataList):
	jsonData=json5.dumps(dataList,ensure_ascii=False)
	with open(r"data.txt","w") as f:
		f.write(jsonData)
		print("------数据写入成功!")

#显示账目
def showData():
	sumIn=0 #总收入
	sumOut=0 #总开支
	dataList=readData()
	print("**************************账单*******************************")
	for data in dataList:
		if data["分类"]=="支出":
			sumOut+=data["金额"]
			print(data["时间"],"    ",data["项目"],"    ",data["金额"]*-1)
		else:
			sumIn+=data["金额"]
			print(data["时间"],"    ",data["项目"],"    ",data["金额"])
	print("**************************************************************")
	print("**总收入:",sumIn,"元,总开支:",sumOut,"元,结余:",sumIn-sumOut,"元!")


#增加一笔账目
def addData():
	dataList=readData()
	content=input("请输入账单明细:")
	amount=float(input("请输入账单金额:"))
	c=int(input("请选择(1.收入 2.支出):"))
	cla="支出"
	if c==1:
		cla="收入"
	t=datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
	newData={"时间":t, "项目":content, "金额":amount, "分类":cla}
	dataList.append(newData)
	writeData(dataList)



if __name__ == '__main__':
	while 1==1:
		showData()
		c=int(input("=====增加账目请输入1:"))
		if c==1:
			addData()
		time.sleep(2)
		print("\n\n\n")
	

借鉴资源:(53条消息) python的JSON用法——dumps的各种参数用法(详细)_爱吃草莓蛋糕的猴的博客-CSDN博客_json.dump参数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复习Python第八节之json数据 的相关文章

  • Django 中的 Rpy2 错误 - 未为“”类型的对象定义转换“py2rpy”

    我以前从未使用过 R 并且正在尝试使用 rpy2 从 python 调用 R 函数 它可以在独立的 python 终端上运行 但不能在 Django 中运行 但rpy2似乎无法将python字符串转换为r对象 我正在使用同事提供的自定义库
  • 在 pandas 中单独打印一列的原始值?

    我有一个数据框 df pd DataFrame name george age 23 name anna age 26 现在我想检索乔治的年龄 df df name george age 但这会输出一些额外的信息以及原始值 0 23 Nam
  • pandas Wide_to_long 后缀参数

    我对在 pandas 中使用 Wide to long 时的参数有疑问 有一个参数叫suffix我不明白 在文档中它说 后缀 str 默认 d 捕获所需后缀的正则表达式 d 捕获数字后缀 没有数字的后缀可以用否定字符类 D 指定 您还可以进
  • ca 证书 Mac OS X

    我需要在emacs 上安装offlineimap 和mu4e 问题是配置 当我运行 Offlineimap 时 我得到 OfflineIMAP 6 5 5 Licensed under the GNU GPL v2 v2 or any la
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • 无法使用 BeautifulSoup 和 Requests 抓取下拉菜单

    我想抓取百年灵网站上的产品页面以获取各种信息 示例页面 https www breitling com gb en watches navitimer b01 chronograph 46 AB0127211C1A1 https www b
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 在Python中以交互方式执行多行语句

    我是 Python 世界的新手 这是我用 Python 编写的第一个程序 我来自 R 世界 所以这对我来说有点不直观 当我执行时 In 15 import math import random random random math sqrt
  • scikit-learn 和tensorflow 有什么区别?可以一起使用它们吗?

    对于这个问题我无法得到满意的答案 据我了解 TensorFlow是一个数值计算库 经常用于深度学习应用 而Scikit learn是一个通用机器学习框架 但它们之间的确切区别是什么 TensorFlow 的目的和功能是什么 我可以一起使用它
  • 按多个键分组并对字典列表的值进行汇总/平均值

    在Python中按多个键进行分组并对字典列表进行汇总 平均值的最Pythonic方法是什么 假设我有一个字典列表 如下所示 input dept 001 sku foo transId uniqueId1 qty 100 dept 001
  • 在谷歌云上训练神经网络时出现“无法获取路径的文件系统”错误

    我正在使用 Google Cloud 在云上训练神经网络 如下例所示 https cloud google com blog big data 2016 12 how to classify images with tensorflow u
  • Pandas groupby apply 执行缓慢

    我正在开发一个涉及大量数据的程序 我正在使用 python pandas 模块来查找数据中的错误 这通常工作得非常快 然而 我当前编写的这段代码似乎比应有的速度慢得多 我正在寻找一种方法来加快速度 为了让你们正确测试它 我上传了一段相当大的
  • 如何使用 Celery 多工作人员启用自动缩放?

    命令celery worker A proj autoscale 10 1 loglevel info启动具有自动缩放功能的工作人员 当创建多个工人时 me mypc projects x celery multi start mywork
  • 用于多个窗口的 Tkinter 示例代码,为什么按钮无法正确加载?

    我正在编写一个程序 应该 按一下按钮即可打开一个窗口 按另一个按钮关闭新打开的窗口 我使用类 以便稍后可以将代码插入到更大的程序中 但是 我无法正确加载按钮 import tkinter as tk class Demo1 tk Frame
  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • 在 scipy 中创建新的发行版

    我试图根据我拥有的一些数据创建一个分布 然后从该分布中随机抽取 这是我所拥有的 from scipy import stats import numpy def getDistribution data kernel stats gauss
  • 沿轴 0 重复 scipy csr 稀疏矩阵

    我想重复 scipy csr 稀疏矩阵的行 但是当我尝试调用 numpy 的重复方法时 它只是将稀疏矩阵视为对象 并且只会将其作为 ndarray 中的对象重复 我浏览了文档 但找不到任何实用程序来重复 scipy csr 稀疏矩阵的行 我
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 在python中对列表列表执行行总和和列总和

    我想用python计算矩阵的行和和列和 但是 由于信息安全要求 我无法使用任何外部库 因此 为了创建矩阵 我使用了列表列表 如下所示 matrix 0 for x in range 5 for y in range 5 for pos in
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code

随机推荐

  • 恢复U盘分区:windows自带工具diskpart

    步骤 如下图 cmd命令行处执行diskpart命令 运行该工具 然后list disk 列出所有磁盘 然后select disk xxx 选中自己的磁盘 比如下图的是磁盘2 然后clean 清空分区 然后creat partition p
  • 我们这个年龄应该要做的事

    大家好 我是一名入门的菜鸟 如果你不经意间翻开了我的文章 谢谢您 您的支持是我前进的动力 让我们一起加油 由于不是名牌大学 只是一个普普通通的专科生 所以 我想通过自己的努力来获得我想要的 我不会放弃我的梦想 我也曾幻想着我成功的时候在朋友
  • MQ如何保证消息不丢失

    如何保证消息不丢失 哪些环节会造成消息丢失 其实主要就是跨网络的环境中需要考虑消息的丢失 主要是有以下几个方面 生产者往MQ发送消息 MQ的Broker是集群有主从的 主节点把消息同步到从节点时也需要考虑消息丢失问题 消息从内存持久化到硬盘
  • Java 3D 开发

    OPENGL VRML DIRECT3D JAVA3D的比较 Java3D建立在JAVA基础之上 JAVA语言的简单性使JAVA3D的推广有了可能 它实现了以下三维显示能够用到的功能 生成简单或复杂的形体 也可以调用现有的三维形体 使形体具
  • 错误AttributeError: module ‘onnx‘ has no attribute ‘load‘的解决方式

    错误出现 在使用torch导出onnx后 使用 onnx load xxx onnx 出现 AttributeError module onnx has no attribute load 错误原因 详见https github com p
  • 隐马尔可夫模型介绍

    http blog csdn net gumpeng article details 51648259 关于隐马尔可夫的理论介绍 请参见李航博士的 统计学习方法 介绍的很详尽 下面主要通过网上查到的例子来把隐马的相关问题说清楚 以下内容都非
  • 【C语言进阶】自定义类型详解(结构体、枚举、联合)

    博客主页 小王又困了 系列专栏 C语言 人之为学 不日近则日退 感谢大家点赞 收藏 评论 目录 一 结构体 1 1结构体的认识 1 2结构体的声明 1 先声明结构体类型 再定义该类型的变量 2 在声明类型的同时定义 1 3结构体的特殊声明
  • Leetcode 5544: 执行操作后字典序最笑的字符串

    题目描述 给你一个字符串 s 以及两个整数 a 和 b 其中 字符串 s 的长度为偶数 且仅由数字 0 到 9 组成 你可以在 s 上按任意顺序多次执行下面两个操作之一 累加 将 a 加到 s 中所有下标为奇数的元素上 下标从 0 开始 数
  • win10修改默认安装路径

    win10修改默认安装路径 win10修改默认安装路径 1 以Win10系统为例 首先我们鼠标右键点击 开始 菜单 弹出菜单之后 点击 运行 如下图所示 2 在运行的输入框输入 regedit 并点击确定进入注册表编辑器 如下图所示 3 在
  • layui时间选择器---去除秒列

    layui时间选择器 去除秒列 前言 layui开发文档中介绍的时间选择器包含了时 分 秒的选择 在实际开发过程中 我们选择时间可能不需要精确到秒 原始结构 1 HTML页面引入layui js文件 2 HTML文件中添加如下代码 3 在j
  • 大数据分析 开源数据集_什么是大数据分析? 来自各种数据集的快速答案

    大数据分析 开源数据集 有数据 然后有大数据 那么 有什么区别呢 大数据定义 一个清晰的大数据定义可能很难确定 因为大数据可以涵盖许多用例 但是总的来说 该术语指的是数据量如此之大 如此复杂以至于传统的数据处理软件产品无法在合理的时间内捕获
  • 只需一个提示词解除GPT-4的字符限制!

    ChatGPT的内存有限 GPT 3 5 turbo的限制为4897个令牌 而GPT 4的最大限制为8192 如果您在使用GPT 4进行聊天时超过8192个令牌 约6827个单词 它就会开始遗忘 我想出了一种新的技巧 可以轻松将对话扩展10
  • Linux项目实战C++轻量级Web服务器源码分析TinyWebServer

    目录 文章简介 一 先跑起来项目 二 再看项目结构 三 逐个击破 立下flag 文章简介 TinyWebServer是Linux下C 轻量级Web服务器 助力初学者快速实践网络编程 搭建属于自己的服务器 作为新手拿它练手入门再好不过的不二之
  • 蓝桥杯 试题 算法训练 拿金币

    问题描述 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次可以从一个格子走到它右边或下边的格子里 请问如何走才能拿到最多的金币 输入格式 第一行输入一个正整数n 以下n行描述该方
  • TQ2440移植u-boot2016.11全过程记录-【7】NAND FLASH方式启动U-BOOT

    TQ2440移植u boot2016 11 NAND FLASH方式启动U BOOT S3C2440 U BOOT启动方式说明 NOR FLASH启动 S3C2440会直接在NOR上运行程序 在NOR上中的代码需要初始化芯片时钟 初始化SD
  • 关于疫情超走心的文案

    1 盼小城无恙 等烟火寻常 2 以后不在嫌弃人山人海 因为那样才是国泰民安 3 没有一个冬天不会过去 没有一个春天不会到来 4 疫情终时 这人间仍是星河滚烫 水木清华 江山如故 5 待我跨过这病与疾 春和希望都扑面而来 6 疫情结束 是今年
  • h2 mysql 对比_轻量级数据库比较:SQLite、H2和MySQLEmbedded

    对 PHP程序员来说 SQLite可以快速的搭建数据库开发环境 提供轻松 自容器 无配置 无独立服务的数据库环境 所有数据保存在一 对 PHP程序员来说 SQLite可以快速的搭建数据库开发环境 提供轻松 自容器 无配置 无独立服务的数据库
  • 在ubuntu中添加新硬盘

    前言 安装新硬盘这种事情并不会经常 发生同样它也并不复杂 本文将向你说明如何在现有的Ubuntu系统下安装一个新硬盘 并为它设置好分区然后使用它 在动手之前 你需要先考虑下面三个关于新硬盘使用方面的问题 该硬盘是否只会在Ubuntu下使用
  • 数据清洗基础—Kettle 数据转换与清洗、数据抽取操作

    实验一 数据清洗基础 Kettle 数据转换与清洗 数据抽取操作 1 实验题目 Kettle 数据转换与清洗 数据抽取操作 2实验目和要求 2 1熟悉 Kettle 的开发环境 并掌握 Kettle 环境的配置与安装 2 2能使用 Kett
  • 复习Python第八节之json数据

    目录 JSON数据学习 1 数据交换 2 json语法 1 什么是json 2 json的库函数 3 dumps 与dump 以及loads 与load 函数之间的差别 4 Json来模拟以下数据库 文本文档当作数据库 5 使用json案例