文章目录
JSON
json基本结构
- JSON(JavaScript Object Notation)JavaScript 对象表示法,是一种轻量级的数据交换格式,是文本数据,本质上是字符串
- JSON 是存储和交换文本信息的语法,类似 XML
- JSON 比 XML 更小、更快,更易解析
- 前后端交互最适合之一
- Python中利用json模块来转换数据类型和json字符串
- json数据就是字符串
- json语法规范:
- 数据由键值对组成,键值对由逗号分隔,大括号保存对象(dict),中括号保存数组(列表,元组),字符串必须用双引号
- 后缀为
.json
如 student.json
{
"name":"xiaoming","age":16,"feature":["聪明","幽默"] #此处字符串一定用双引号
}
Python对象(obj)和json对象对应关系
Python | json |
---|---|
字典 | 对象 |
列表/元组 | 数组 |
字符串 | 字符串 |
int/float | 数字 |
True/False | true/false |
None | null |
Python和json转化方法
- 四种方法
- dumps
- dump
- loads
- load
dumps
- 把Python对象转换成json数据(字符串)
案例:
import json
student = {'name': 'xiaohong', 'age': 17, 'feature': ['美丽','nice']}
json_str = json.dumps(student,ensure_ascii=False)
#dumps(此处为字符串)
#此处的ensure-ascii=false 可加可不加,如果不加,Python中的汉字则为Unicode编码,如\u5584\u826f,加则可转化成汉字
print(json_str) #{"name": "xiaohong", "age": 17, "feature": ["beautiful", "nice"]}
print(type(json_str)) #<class 'str'>
dump
- 把Python对象转换成json文件
案例:
import json
student = {"name":"xiaohong","age":17,"feature":["美丽","善良"]}
with open("test.json","w",encoding="utf-8") as f:
json.dump(student,f)
loads
- 把json字符串转换成Python对象
案例:
importjson
json_str = '{"name":"xiaona","age":19,"hobbies":["sing","dance"]}'
obj = json.loads(json_str) #loads(此处为字符串)
print(obj) #{'name': 'xiaohong', 'age': 19, 'hobbies': ['sing', 'dance']}
print(type(obj)) #<class 'dict'>
load
- 把json文件转换成Python对象
案例:
import json
with open("test.json","r",encoding="utf-8") as f:
obj = json.load(f) #load(此处为文件)
print(obj) #{'name': 'xiaohong', 'age': 19, 'feature': ['beautiful', 'nice']}
print(type(obj)) #<class 'dict'>
例(dumps,dump,load,loads)
- 加 s 的是和文件无关的,不加 s 的是和文件有关的
import json
# 将 python 对象转换成 json 字符串
a = [
{
'name': 'xiaoge',
'age': 18,
'hobby': 'girls'
}
]
# a = 'haha'
# json.dumps():将 python 数据形式转换成 json 数据
# a_str = json.dumps(a)
# print(a_str,type(a_str)) #[{"name": "xiaoge", "age": 18, "hobby": "girls"}] <class 'str'>
with open('a.json','w',encoding='utf8') as f:
# f.write(a_str)
# json.dump():将 python 数据形式直接写入 json 文件中
#想要写入的数据形式不变,需要用 ensure_ascii=False,比如想写入中文
json.dump(a,f,ensure_ascii=False)
with open('a.json','r',encoding='utf8') as fp:
# json.load():将 json 文件的数据转换成 python 数据类型
b = json.load(fp)
print(b,type(b)) #[{'name': 'xiaoge', 'age': 18, 'hobby': 'girls'}] <class 'list'>
c = '[{"name": "xiaoge", "age": 18, "hobby": "girls"}]'
# 将 json 字符串转换成 python 数据类型
c_str = json.loads(c)
print(c_str,type(c_str)) #[{'name': 'xiaoge', 'age': 18, 'hobby': 'girls'}] <class 'list'>
base64
- 用文本(ASCII字符)表示二进制数
- 64个字母来表示A-Z, a-z, 0-9, +,/
0-25 26-51 52-61 62 63
- 每三个字节换成四个base64
b“abc”:b"YWJj"
01100001 01100010 01100011(3*8)
011000 010110 001001 100011 (4*6)
24 22 9 35
Y W J j
import base64
info = b'abc'
res = base64.b64encode(info) #编码接收的是字节数据,返回的也是字节数据
print(res) #b'YWJj'
res = base64.b64decode(res)
print(res) # b'abc'
#解码接收的是字节数据,返回的也是字节数据
虽然64个ASCII可以自定义,但不是加密算法
- 如果原文本字节数不是3的倍数,编码后用=补齐
import base64
url = b"abc3"
res = base64.b64encode(url) #b’YWJjMw==’
print(res)
- base64编码后,+,/,在URL中,不可以,如果要对URL进行编码,专门的安全的URL编码,本质上,是将+和/用-和_取代,base64.urlsafe_b64encode
url = b"\xfb\xff\xbf"
print(base64.b64encode(url)) #b’+/+/’
print(base64.urlsafe_b64encode(url)) #b’--’
csv
- CSV文件:Comma-Separated Values,中文名是 逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据
- 该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分割
- 每条记录由字段组成,字段间的分隔符是其他字符或者字符串,所有的记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式
- 用文本文件、EXcel或者类似与文本文件的都可以打开CSV文件
- 特点:
- 纯文本,使用某个字符集,比如 ASCII,Unicode,ebcdic 或者 gb2312 等
- 有记录组成(典型的是每行一条记录)
- 每条记录被分隔符分隔为字段(典型分隔符有逗号,分号或制表符,有时分隔符可以包括可选的空格)
- 每条记录都有同样的字段序列
写,读
import csv
# 写 csv 文件
#1 写入的方式是通过位置对应
# headers = ['name','age','hobby'] #类型是列表或者元组
# headers = ('name','age','hobby') #类型是列表或者元组
# values = [
# ('xiaoge',16,'girls'),
# ('na',17,'xiaoge'),
# ('jing',15,'xiaoge'),
# ('wen',18,'xiaoge')
# ]
# 如果每写入一行就空一行的话,可以设置 newline='' 去除空行,newline 默认为 ='\n'
# with open('a.csv','w',encoding='utf8',newline='') as f:
# writer = csv.writer(f)
# writer.writerow(headers) #一次写一行
# writer.writerows(values) #一次写多行
#2 写入方式是通过字典键值对一一对应,不是位置对应
# headers = ['name','age','hobby'] #类型是列表或者元组
headers = ('name','age','hobby') #类型是列表或者元组
values = [
{'name': 'xiaoge', 'age': 16, 'hobby': 'girls'},
{'name': 'na', 'age': 17, 'hobby': 'xiaoge'},
{'name': 'jing', 'age': 15, 'hobby': 'xiaoge'},
{'name': 'wen', 'age': 18, 'hobby': 'xiaoge'}
]
with open('a.csv','w',encoding='utf8') as f:
writer = csv.DictWriter(f,headers)
#需要手动写入 headers
writer.writeheader()
# writer.writerow(values)
writer.writerows(values)
# 读取 csv 文件
with open('a.csv','r') as fp:
#1 读取 csv 文件
#reader 是个迭代器
# reader = csv.reader(fp)
# next(reader) #跳过第一行
# for a in reader:
# print(a)
#2 读取 csv 文件
#reader 是迭代器,不会包含标题那行的数据
reader = csv.DictReader(fp)
for a in reader:
b = {
'name': a['name'],
'hobby': a['hobby']
}
print(b)