json,base64模块,csv

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对象对应关系

Pythonjson
字典对象
列表/元组数组
字符串字符串
int/float数字
True/Falsetrue/false
Nonenull

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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值