Eval 和 json 的使用 | 学习笔记

简介: 快速学习 Eval 和 json 的使用

开发者学堂课程【Python 入门 2020年版: Eval 和 json 的使用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10323


Eval 和 json 的使用

内容介绍:

一、 集合的练习

二、 转换相关的方法

 

一、集合的练习

#有一数据,要求去重排序。这里有两要求,第一是去重,第二是排序。

去重:将一个可迭代对象代入 set,即可去重。

但 set 是无序,要想排序,就在转成 list。取个 x 等于 list。运行,现在数据已有序。

nums =[5,8,7,6,4,1,3,5,1,8,4]

x =list (set ( nums ))

print(x)

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

[1, 3, 4, 5, 6, 7, 8]
Process finished with exit code 0

注意点:现x是集合,现把列表转成了集合,转换后去重。而且还有种情况,如果是数字,将会自动排序。现是集合,集合是不会排序的,故不好用。

nums =[5,8,7,6,4,1,3,5,1,8,4]

x =set ( nums )

print(x)

现 y=list(x),list 是个可迭代对象,x是集合也是一个可迭代对象。将集合转成列表,对列表进行排序。现就是倒序排列的数据。去重,转至 set,在排序,变成有序的,在变成 list。

nums =[5,8,7,6,4,1,3,5,1,8,4]

x =set ( nums )

y = list ( x)

y . sort ( reverse = True )

print ( y )

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

[8, 7, 6, 5, 4, 3, 1]
Process finished with exit code 0

 

二、转换相关的方法

#内置类 list tuple set (dict),都有转换的功能。但 dict 不一样,其他是单个数据,dict 是渐增的数据。现将 nums 是可迭代对象,转换成元组,用tuple,将可迭代对象代入。现 x 等于 tuple,打印 x。就是一个 tuple,就是一个元组。

nums =[9, 8, 4, 3, 2, 1]

x= tuple ( nums )

print ( x )

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)
Process finished with exit code 0

现将它变回,但不能变回一样,因为原来的数据是无序的。因为变成 set 就是无序的。再将元组转换成 set,

nums =[9, 8, 4, 3, 2, 1]

x= tuple ( nums )#使用 tuple 内置类转换成为元组

print ( x )

y = set ( x )#使用 set 内置类转换成为集合

print ( y )

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)

{1,2, 3, 4, 5, 8, 9}
Process finished with exit code 0

将元组转成集合,将列表转成集合,都可以。

nums =[9, 8, 4, 3, 2, 1]

x= tuple ( nums )#使用 tuple 内置类转换成为元组

print ( x )

y = set ( nums )#使用 set 内置类转换成为集合

print ( y )

在set里要的是可迭代对象。

def_iand_(self,*args,**kwargs):#real signature unknown

“””Return self&=value,”””

pass

def_init_(self,seq=()):#known special case of set,_init_

“””

Set()->new empty set object

Set(iterable)->new set object

Build an unordered collection of unique elements

#(copied from class doc)

“””

将质点放入:

nums =[9, 8, 4, 3, 2, 1]

x= tuple ( nums )#使用 tuple 内置类转换成为元组

print ( x )

y = set ( nums )#使用 set 内置类转换成为集合

print ( y )

z = list ({' name ':' zhangsan ',' age ‘:18,' score ':98})

print ( z )

运行结果:

首先其肯定是个列表,列表里存的都是 k。它们之间可以相互转换。转成元组用tuple,转成集合就用 set 类。转成 list 就用 list 类。C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)

{1,2, 3, 4, 5, 8, 9}

[‘name’, ’age’, ’score’]
Process finished with exit code 0

# Python 里有一个比较强大的内置函数 eval,可以执行字符串里的代码 。将字符串转成命令。

a =' input (“请输入您的用户名")'# a 是一个字符串

print ( a )

运行结果:

直接打印内容。直接将Python里的代码执行。C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)

{1,2, 3, 4, 5, 8, 9}

[‘name’, ’age’, ’score’]

input(“请输入您的用户名”)
Process finished with exit code 0

a =' input (“请输入您的用户名")是符合 Python 的代码。接着将代码执行:

a =' input (“请输入您的用户名")'#  a  是一个字符串

eval(a)

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)

{1,2, 3, 4, 5, 8, 9}

[‘name’, ’age’, ’score’]

请输入您的用户名

Process finished with exit code 0
a =' input (“请输入您的用户名")'# a 是一个字符串

b=’1+1’

print(b)

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)

{1,2, 3, 4, 5, 8, 9}

[‘name’, ’age’, ’score’]

1+1

Process finished with exit code 0
1+1的和为:

a =' input (“请输入您的用户名")'# a 是一个字符串

b=’1+1’

print(eval(b))

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

(9, 8, 4, 3, 2, 1)

{1,2, 3, 4, 5, 8, 9}

[‘name’, ’age’, ’score’]

2
Process finished with exit code 0

转 int 是用 int。例如:

c=’100’

int(c)

eval 可以执行字符串里的代码。

JSON(JavaScriptObjectNotation, JS 对象简谱)是一种轻量级的数据交换格式,它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON 本质是一个字符串
JSON 的功能强大,使用场景也非常的广,目前我们只介绍如何使用 Python 的内置 JSON 模块,实现字典、列表或者元组与字符串之间的相互转换。
使用 json 的 dumps 方法,可以将字典、列表或者元组转换成为字符串。

image.png

前后端交互,前端 JS,姓名,年龄,性别,在浏览器填完后将数据发给后台的服务器,服务器将数据在写入数据库。

历史:早期前端用的是 JS ,后端用的是 Python。这两者数据类型不相通。

在 Python 里,数据叫做字典。在JS里叫做对象。传递数据最简单的是传字符串。

将字符串按一定的编码格式传入。因为不管是什么语言 JS、Python……,都认识字符串或者文本。所以最开始传的是文本,文字要根据 int 的规范来写。传图像的方法很多,传图像直接传地址,通过地址访问,很少传内容。

将文字传入服务器,传过来后,根据一定的格式就是文本内容,所以叫做 XML。 XML 里东西太多,name 有开始也有结束,最好的方法就是有一个 name。同样的信息,用最少的信息表示最好,所以就出现的 JSON。

JSON 本质是字符串不是字典,伪装成字典的格式,里面的是字符串。JSON 里的字符串只能用双引号,不能用单引号。

import json

# JSON 的使用,把列表、元组、字典等转换成为 JSON 字符串

person ={' name ':' zhangsan ',' age ':18,' gender ':' female '}

#字典如果想要把它传给前端页面或者把字典写入到一个文件里。比如将字典数据写入文件 infor.txt 里,也要将‘’name ':' zhangsan ',' age ':18,' gender ':' female‘变成字符串,18 可以加可以不加,因为 18 是数字,JSON 能识别。

’#'{" name ":" zhangsan "," age ":18," gender ":" female "}'

m = json . dumps ( person )#  dumps 将字典、列表、集合、元组等转换成为 JSON 字符串

print ( m )

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

2

{" name ":" zhangsan "," age ":18," gender ":" female "}
Process finished with exit code 0

注意:{" name ":" zhangsan "," age ":18," gender ":" female "}
不再是字典:

# JSON 的使用,把列表、元组、字典等转换成为 JSON 字符串

person ={' name ':' zhangsan ',' age ':18,' gender ':' female '}

#字典如果想要把它传给前端页面或者把字典写入到一个文件里。

’#'{" name ":" zhangsan "," age ":18," gender ":" female "}'

m = json . dumps ( person )# dumps 将字典、列表、集合、元组等转换成为 JSON 字符串

print ( m ) #'{" name ":" zhangsan "," age ":18," gender ":" female "}'

print ( type ( m ))#

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

{" name ":" zhangsan "," age ":18," gender ":" female "}
Process finished with exit code 0

所以m是字符串。JSON 本质是字符串。

#print ( m [' name '])不能这样使用, m 是一个字符串,不能再像字典一样根据 key 获取 value

比如:现将字符串变成字典

n ='{" name ":" Lisi "," age ":20," gender ":" male "}'

p = eval( n )

print ( p )

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

{" name ":" zhangsan "," age ":18," gender ":" female "}

{‘ name ‘:’Lisi ‘,’ age ‘:20,’ gender ‘:’male ‘}

Process finished with exit code 0

接着打印 type(p),也能变成字典,使用 eval 也能将字符串转成字典:

n ='{" name ":" Lisi "," age ":20," gender ":" male "}'

p = eval( n )

print (type( p ))

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

{" name ":" zhangsan "," age ":18," gender ":" female "}

Process finished with exit code 0

n ='{" name ":" Lisi "," age ":20," gender ":" male "}'

#p = eval( n )

#print (type( p ))

s=json.loads(n)#loads可以讲 json 字符串转换成为 Python 里的数据

print(s)

print(type(s))

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

{" name ":" zhangsan "," age ":18," gender ":" female "}

Process finished with exit code 0

如果是列表也能变成列表:

n=’[“hello”,”good”]’

s=json.loads(n)

print(s)

print(type(s))

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

[‘hello’,’good’]

Process finished with exit code 0

# Python      JSON

#字符串      字符串(比如 name 是一个字符串,转换成 JSON 是一个字符串)

#字典        对象(比如是字典,转换成 JSON 是对象)

#列表、元组、          数组

比如:

print ( json . dumps ([' hello ',' good ',' yes ' ]))(集合)

print ( json . dumps ((' hello ',' good ',' yes ' )))(元组)

print ( json . dumps ({' hello ',' good ',' yes ' }))( set )

打印结果:File "C:\Users\chris \AppData\Local\Programs Python\Python37\lib\ison\encoder.py", line 257,in iterencode

return_ iterencode(o, 0)
File "C:\Users\chris\AppData\Local\Programs Python\Python37\lib\json\encoder .py", line 179, in default
raise TypeError(f'object of type {o._ classname}

TypeError: Object of type set is not JSON serializable

{"name": " zhangsan", "age": 18, "gender": "female"}
["hello", "good", "yes"]
["hello", "good", "yes"]
Process finished with exit code 1

注意集合不能转。

print ( json . dumps ([' hello ',' good ',' yes ' ]))(集合)

print ( json . dumps ((' hello ',' good ',' yes ' )))(元组)

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

{"name": " zhangsan", "age": 18, "gender": "female"}
["hello", "good", "yes"]
["hello", "good", "yes"]
Process finished with exit code 0

转换成JSON长相都是一模一样,["hello", "good", "yes"] 在 JSON 里叫数组。并不是所有的都能转。

# Python            JSON

#Ture               ture

#False              false

#字符串              字符串

#字典                对象

#列表、元组、          数组

比如写个布尔值,将它转成JSON:

print ( json . dumps ([' hello ',' good ',' yes ',True ]))

print ( json . dumps ((' hello ',' good ',' yes ' ,False)))

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

{"name": " zhangsan", "age": 18, "gender": "female"}
["hello", "good", "yes",true]
["hello", "good", "yes",false]
Process finished with exit code 0

JSON 也有对应的数据类型。注意:JSON 里的数组转回来,变成 Python 里的列表。

n=’[“hello”,”good”]’

s=json.loads(n)

print(s)

运行结果:C:\Users\chris\AppData\Local\Programs\Python\Python37\python. exe C:/Users/chris/Desktop/Python基础/Day08-函数

[‘hello’,’good’]

Process finished with exit code 0

相关文章
|
2月前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
201 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
JSON 前端开发 数据格式
前端学习笔记202306学习笔记第三十七天-js-认识json数据2
前端学习笔记202306学习笔记第三十七天-js-认识json数据2
49 0
|
7月前
|
JSON 前端开发 Java
Spring mvc-文件上传与JSON-学习笔记
Spring mvc-文件上传与JSON-学习笔记
75 2
|
JSON 编解码 Linux
Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill)
Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill)
73 0
Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill)
|
JSON 前端开发 数据格式
前端学习笔记202307学习笔记第六十天-json server的介绍和服务搭建1
前端学习笔记202307学习笔记第六十天-json server的介绍和服务搭建1
70 0
|
JSON 前端开发 数据格式
前端学习笔记202306学习笔记第三十七天-js-认识json数据1
前端学习笔记202306学习笔记第三十七天-js-认识json数据1
64 0
|
JSON 前端开发 数据格式
前端学习笔记202306学习笔记第三十七天-js-认识json数据3
前端学习笔记202306学习笔记第三十七天-js-认识json数据3
61 0
|
JSON 数据格式 Python
python读取exlce并转为json的学习笔记
python读取exlce并转为json的学习笔记
86 0
|
JSON 数据格式
java202303java学习笔记第四十六天-请求-日期参数&json参数1
java202303java学习笔记第四十六天-请求-日期参数&json参数1
208 0
|
JSON 数据格式
java202303java学习笔记第四十六天-请求-日期参数&json参数2
java202303java学习笔记第四十六天-请求-日期参数&json参数2
62 0

热门文章

最新文章