Python笔记21-对象的序列化和反序列化&excel的读写

一、文件读写

1.对象的序列化和反序列化

【面试题】简述对象的序列化和反序列化

对象的序列化:将Python中的任意一个对象持久化到磁盘上

对象的反序列化:将磁盘上的对象读取出来,转换为一个Python对象

在Python中,可以实现对象的序列化和反序列化的模块:pickle和json

1.1pickle模块

import  pickle

# 1.
def write_file1():
    with open(r"file1.txt",'a',encoding='utf-8') as f:
        # 注意:普通文本文件的写入,参数必须是字符串,不能是其他类型
        f.write("abc")
        # TypeError: write() argument must be str, not list
        # f.write([34,56,7])

# 2.
"""
注意:
    1.对象的序列化和反序列化,对象是以字节的方式进行操作的,所以使用wb或rb方式打开
    2.对象的序列化:相当于将对象写入到本地文件,pickle.dump()
    3.对象的反序列化:相当于将对象从本地文件读取出来,pickle.load()
"""

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def show(self):
        print(f"姓名:{self.name},年龄:{self.age}")

# a.序列化
"""
pickle.dump(obj,file)
    obj:需要序列化的Python对象,Python中一切皆对象
    file:需要写入的文件对象
"""
def write_file2():
    with open(r"file2.txt", 'wb') as f:
        # pickle.dump("hello",f)
        # pickle.dump([34,6,8,89],f)

        p = Person("张三",10)
        pickle.dump(p, f)

# b.反序列化
"""
pickle.load(file)
    file:需要读取的文件对象
"""
def read_file2():
    with open(r"file2.txt", 'rb') as f:
        r = pickle.load(f)
        print(r,type(r))
        r.show()

if __name__ == '__main__':
    write_file2()
    read_file2()

1.2json模块

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成

好处:

a.可以在不同的操作系统之间进行数据的交互

b.可以在不同的程序之间进行数据的交互

c.可以在不同的编程语言之间进行数据的交互

JSON和Python中的数据类型比对

Python类型 JSON类型 说明
dict object 字典/对象
list array 列表/数组
str string 字符串
int/float number 数字
True/False true/false 布尔值
None null 空值

JSON格式:

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

import  json

info_dict = {
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}
print(info_dict)
print(type(info_dict))


# 1.序列化[Serialize]
"""
json.dump(obj,file):将python中的字典或列表对象序列化为json字符串,然后将该字符串写入到指定文件中
    obj:需要序列化的Python对象,常用字符串,数字,布尔值,字典或列表
    file:需要写入的文件对象
   
json.dumps(obj):将python中的字典或列表对象序列化为json字符串
"""
# a
# 注意:如果Python的字典或列表内容中包含中文,默认会被编码,如果需要正常显示,设置ensure_ascii=False
r1 = json.dumps(info_dict,ensure_ascii=False)
print(r1)
print(type(r1))

# b.
with open(r"file3.json",'w',encoding='utf-8') as f:
    json.dump(info_dict,f,ensure_ascii=False)


# 2.反序列化[Deserialize]
"""
json.load(file):将指定文件对象中包含的json字符串反序列化出来,转化为Python中的列表或字典对象
json.loads():将JSON字符串反序列化出来,转化为Python中的列表或字典对象
"""
# a.
r2 = json.loads(r1)
print(r2)
print(type(r2))

# b.
with open(r"file3.json",'r',encoding='utf-8') as f:
    r3 = json.load(f)
    print(r3)
    print(type(r3))

2.Excel读写

Python中的模块分为三大类:

a.系统模块:直接import  xxx

b.自定义模块

c.第三方模块,必须先安装,然后再使用

操作excel的第三方模块:

1.pandas:是进行数据处理和数据分析的模块,可以用来处理excel

2.xlrd,xlwt:可以进行基本的excel的操作,xlrd负责读取,xlwt负责写入,xlutils负责辅助和衔接,针对的是.xls

3.xlwings:不但可以进行内容的读写,还可以进行单元格格式的修改

4.xlsxwriter:用于写文本,数字,公式,还可以进行单元格格式化,图片,图表,自动过滤等特性,针对的是.xlsx

5.openpyxl:通过工作簿—》工作表——》单元格的模式对.xlsx文件进行读写,修改,可以调整样式

第三方模块的安装流程:

a.在cmd中,执行 pip   install   xxxx,默认的pip源在国外,下载速度较慢

b.如果修改pip镜像源,可以将pip镜像源修改到国内,执行命令:pip   install   xxxx  -i   镜像源

 常用的国内镜像源如下:

 (1)阿里云 http://mirrors.aliyun.com/pypi/simple/

(2)豆瓣http://pypi.douban.com/simple/

(3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

(4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

(5)华中科技大学http://pypi.hustunique.com/

  (6)Python官方https://pypi.python.org/simple

c.如果要卸载第三方模块,则执行pip  uninstall   xxx

# excel:工作簿----》工作表----》行----》单元格

import  xlrd,xlwt

# 1.xlrd:读取/获取:了解
# a.打开工作簿
workbook = xlrd.open_workbook(r"成绩表.xls")
print(workbook)
# b.获取所有的工作表
print(workbook.sheet_names())  #['1班', '2班']
# c.根据索引获取指定的sheet对象
sheet = workbook.sheet_by_index(0)
print(sheet)

# d.根据工作表名称获取指定的sheet对象
sheet = workbook.sheet_by_name('1班')
print(sheet)
print(sheet.nrows)   # 行
print(sheet.ncols)   # 列

# e.获取指定工作表的单元格
cell = sheet.cell(1,0)
print(cell)
print(cell.value)  # 获取单元格的文本值

# 2.xlwt:掌握,后期在爬虫中用来存储数据
# a.创建工作簿
workbook = xlwt.Workbook()
print(workbook)

# b.增加一张工作表
sheet = workbook.add_sheet("sheet1")

# 注意:向excel中写入内容时,文件必须处于关闭状态,行和列都是从0开始计算的
# c.写入表头,第0行第0~2列
headers = ['姓名','年龄','地址']
for index,header in enumerate(headers):
    # sheet.write(row,col,value)
    sheet.write(0,index,header)

# d.写入正文,第1~4列第0~2列
data = [
    ['张三',10,'北京'],
    ['aaa',10,'shanghai'],
    ['李四',14,'guangzhou'],
    ['tom',10,'杭州']
]

for row in range(len(data)):
    for col in range(len(data[row])):
        sheet.write(row + 1,col,data[row][col])

# e.保存工作簿,注意:文件格式保存为xxx.xls
workbook.save('info.xls')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值