Python之第十章 IO及对象列化

news2024/11/24 16:31:15

目录

Python之第十章 IO及对象列化

1.IO流(IO stream)

1.概述

2.IO流定义

3.流的分类

2.open方法

1.过程

2.缓冲区(buffer)

使用缓存区的必要性:

缓冲区分类:

3.格式

4.b模式

5.+模式

6.文件对象的操作

7.遍历文件

8.小结

9.写方法 --- write()

10.tell()方法

11.seek()方法

12.close()

3.对象序列化

1.什么是对象序列化

2.产生原因

3.pickle模块 --- 常用列表

4.json模块 --- 常用字典


Python之第十章 IO及对象列化

1.IO流(IO stream)

1.概述

        在本地进行文件存储,形成持久化的读写数据的能力

2.IO流定义

        IO流 --- 输入输出流,指将一种数据读入内存和从内存中输出的技术

        作用 --- 持久化数据,保证数据不再丢失

3.流的分类

        字节流(b)--- 字节处理,可以操作一切数据,如:音频、图片、可执行文件,字节流操作大数据时,不建议一次性读取

        字符流(t)--- 字符只能操作UTF-8字符数据,一般不用考虑存储空间不够用的问题(500万字10MB)

2.open方法

1.过程

2.缓冲区(buffer)

        缓冲区是内存的一部分存储空间,在内存中预留了一定存储空间,该空间用于缓冲输入或输出。

使用缓存区的必要性:

        1.由于内存的I/O速度比外设的I/O速度远远大于,同步读写时会造成内存长时间等待,浪费性能

        2.可能会造成数据溢出或淹没

缓冲区分类:

        1.全缓冲 --- 填满标准I/O缓冲区才会进行实际的传输操作,硬盘的文件默认使用全缓冲

        2.行缓冲 --- 当输入输出遇到换行符时就会缓冲

        3.无缓冲 --- 用户不提供缓冲,对数据流立即进行读写操作

3.格式

        f = open(filename, mode, encoding)

        open()方法 返回值是一个file对象,可以赋值给一个变量(文件句柄)

        filename --- 文件名,是一个字符串,包含路径

        encoding --- 编码格式,一般为 utf-8

        mode --- 打开文件方式:

模式操作作用
r只读默认模式,文件若不存在则会报错
w写入若文件不存在则会新建,若已存在会清空原有内容后输入
a追加若文件不存在则会新建,若已存在则在最后位置追加新内容
x新建若文件已存在会报错,比w安全
b二进制如:rb ,wb,ab 以byte类型操作
+读写如:r+ w+ a+
f = open('t1.txt', 'w')  # 打开
​
f.write('python 是一种非常好的语言,\n我喜欢Python\n')  # 写入
​
f.close()  # 关闭
​

4.b模式

        二进制模式 --- 一般用于读取图片、视频等二进制文件

注意:

        b模式是以byte类型读取文件的,返回的是byte对象不是字符串,必须定义编码格式,输入的类型必须保证byte类型

s = 'this is a test'
b = bytes(s, encoding='utf-8')
f = open('test.txt', 'wb')
f.write(s)
f.close()
# 打开方式为wb,写入为s串会报错
​
#正确写法
s = 'this is a test'
b = bytes(s, encoding='utf-8')
f = open('test.txt', 'wb')
f.write(b)
f.close()

5.+模式

        对于w+模式,在读写之前会清空原有数据,建议不要使用

        对于a+模式,永远只会在文件的尾部写入,有局限性,不建议使用

        对于r+模式,也就是读写结合模式,配合seek( )和tell( )方法实现更多的操作

6.文件对象的操作

        read(size)--- 读取一定大小的数据,然后作为字符串或字节对象返回 ,size为可选参数,用于指定读取的数据量,size忽略或者为负数时表示改文件所有内容都将被读取并返回

f = open('test.txt', 'r')
str1 = f.read()
print(str1)
str2 = f.read(4)
print(str2)
f.close()
​
# 若文件体积较大,可以分多个读取,使用read(512)方法一点一点读取

        readline()--- 从文件中读取一行或多行内容,换行为\n,若读取到最后一行则返回空串,用于读一行,处理一行,不能回头

f = open('t1.txt', 'r')
​
str1 = f.readline()
print(str1)
f.close()

        readlines()--- 将文件所有行,一行一行全部读入到一个列表中,按顺序存储到列表中,返回一个列表

f = open('t1.txt', 'r')
​
str1 = f.readlines()
print(str1)
f.close()

7.遍历文件

实际上可以将文件对象作为一个迭代器使用

f = open('t1.txt', 'r')
​
for i in f:
    print(i, end=' ')
    
结果:
python 是一种非常好的语言,
 我喜欢Python

8.小结

几种不同的读取文件方法,若文件容量小使用read()一次性读取完比较方便,若不能确定文件大小则可以使用read(size)反复测试,若是配置文件可以使用readlines()较为方便或者for循环变量

9.写方法 --- write()

        作用 --- 将字符串或者字节数据写入文件

        write()多次操作实际是在内存中完成,并不会立即写入磁盘,只有close()后操作同步到磁盘

        格式 --- 文件对象.write(‘内容’)

10.tell()方法

        用途 --- 返回文件读写指针的位置,从文件开头算起的字节数

11.seek()方法

        用途 --- 移动若干个字符到指定位置,如:seek( x,1 )表示从当前位置开始向后移动x个字符,seek(-x,2)从结尾开始向前移动

f = open('t1.txt', 'rb+')
f.write(b'123456789')
f.tell()
print(f.seek(5))
print(f.seek(1))
print(f.seek(2, 2))
print(f.seek(3, 1))
f.close()
# (x,数字),数字有0,1,2  0---从文件开头算起 1--- 从文件读写指针的位置开始算起 2--- 从文件结尾算起 默认为0

12.close()

        作用 --- 关闭文件对象,处理完一个文件后,关闭文件并释放资源,则关闭后若再次尝试读写操作会抛出异常,若忘记调用close()则后果可能数据只会写入一部分,剩余数据会丢失。

3.对象序列化

1.什么是对象序列化

        对容器等对象这种抽象的概念转化为真正存储的字符或字节数据的过程。

2.产生原因

        便于存储 --- 序列化的过程本质就是将文本信息转为二进制数据量,Python中程序运行的数据如:序列、字符串、元组等要向永久保存方便以后使用,必须进行序列化。

        便于传输 --- 当两个进程进行远距离通信时,彼此可以发送各种类型数据,无论何种类型数据都会以二进制序列进行传输,接收方收到后进行反序列化转为可以识别的字符集恢复为对象

3.pickle模块 --- 常用列表

        作用 --- 通过pickle模块的序列化操作可以将运行的对象信息存储到文件中,永久保存,通过pickle反序列化操作可以从文件中回复对象

        常用方法 --- dump,dumps,load,loads

# dumps 序列化为字节数据
import pickle
​
list1 = [10, 20, 30, 40, 50]
data1 = pickle.dumps(list1)
print(data1)
​
f = open('test2.txt', 'wb')
f.write(data1)
f.close()
​
f = open('test2.txt', 'rb')
data2 = f.read()
print(data2)
f.close()
​
结果:
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\nK\x14K\x1eK(K2e.'
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\nK\x14K\x1eK(K2e.'
​
​
import  pickle
​
​
f = open('test2.txt','rb')
show = f.read()
show = pickle.loads(show)
print(show)
f.close()
​
结果:
[10, 20, 30, 40, 50]

        例 将字符串序列化存储出道test3.txt中,读取后反序列化输出

# 例 将字符串序列化存储出道test3.txt中,读取后反序列化输出
import pickle
​
# dump
str1 = ['china', 'hello', 'fangfang']
data2 = pickle.dumps(str1)
print(data2)
​
f = open('test3.txt', 'wb')
f.write(data2)
f.close()
​
f = open('test3.txt', 'rb')
data2 = f.read()
f.close()
print(data2)
​
# load
f = open('test3.txt', 'rb')
show = f.read()
show = pickle.loads(show)
f.close()
print(show)
​
结果:
b'\x80\x04\x95 \x00\x00\x00\x00\x00\x00\x00]\x94(\x8c\x05china\x94\x8c\x05hello\x94\x8c\x08fangfang\x94e.'
['china', 'hello', 'fangfang']
​

4.json模块 --- 常用字典

        作用 --- json模块将对象序列化为字符数据

        方法 --- dump,dumps,load,loads

注意:

        一般用于处理字典类型数据

        例

import json
​
dict1 = {'username': 'Fang Yanhong', 'age': '18', 'number': '1'}
data2 = json.dumps(dict1)
print(json.dumps(dict1))
​
f = open('test4.txt', 'wt')
f.write(data2)
f.close()

注意:

        打开方式为wt,字符形式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS 7搭建LittlePaimon原神机器人

CentOS 7.6搭建LittlePaimon原神机器人 前言 最近小伙伴说别人的QQ群里有个原神的机器人,可以随时查询自己账号的角色卡信息。然后我自己查了下资料,发现不是很难弄,所以帮忙也弄了一个。 目前使用较多的原神机器人: LittlePaim…

SpringMVC学习篇(八)

SpringMVC拦截器 1.拦截器和过滤器的区别 过滤器拦截器servlet规范中(java ee)规范中的一部分,任何java web工程都可以使用拦截器是框架提供的,如只有在SpringMVC框架下的工程才能使用其提供的拦截器在url-pattern中配置了/*之后,可以拦截任何一切资源拦截器只会拦截控制器方…

easyrecovery工具2023最新版一键恢复丢失数据免费下载

通常,许多人会将工作或生活中的数据存储在我们的计算机上。很多时候,由于我们的误操作或其他一些问题,很容易错误地删除一些文件和数据。特别是,一些计算机故障总是会导致数据丢失,这是非常麻烦的。当需要重新安装系统…

JS 对象总结

对象 创建对象 有两种方式: 通过 new 操作符实例化一个对象,再添加属性。 let person new Object(); person.name "孤城浪人"; person.sayName function() { console.log(this.name); };构造函数,若不需要传参&#xff0…

代码随想录——单词接龙(图论)

题目 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列: 序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典 wordList 中的单词。 给你两个单词 b…

AWVS的简介与安装

目录预备知识实验目的实验环境实验步骤一任务描述:AWVS的简介实验步骤二任务描述:进行AWVS10.5的安装、界面介绍和简单的使用实验步骤三任务描述:AWVS 11.x的安装与简单使用预备知识 Acunetix Web Vulnerability Scanner(简称AWV…

Qtcreator中文显示乱码问题终于解决

问题描述:Qtcreator安装好后打印中文在控制台输出乱码(自己也在网上查找了好久,终于找到解决方法了)。 原因剖析:因为项目的编码与控制台的编码不一致导致的,而qt编码设置里并没有控制台的默认编码&#xf…

华为M-LAG跨设备链路聚合技术理论讲解

目录 为什么会出现M-LAG M-LAG基本概念 M-LAG建立过程 M-LAG的协议兼容性 M-LAG的防环机制 M-LAG正常工作流量转发 单播流量转发 组播流量转发 广播流量转发 M-LAG故障场景流量转发 上行链路故障 下行链路故障 M-LAG主设备故障 Peer-link故障 M-LAG二次故障&…

Kafka部署实验

一、实验介绍 1.1实验内容 实验在Hadoop集群上部署Kafka分布式发布订阅消息系统,并完成kafka消息管理验证。 1.2实验知识点 Kafka集群部署 Kafka消息处理流程 1.3实验环境 Kafka2.11 网易云平台 1.4实验资源 资源名称存储目录Kafka安装包/opt/software/pack…

工业数采网关 工业数采模块 工业数采工业数采终端硬件

计讯物联TG462工业数据采集网关,支持工业采集、边缘计算、无线通信、远程控制、远程运维,广泛应用于智慧工业远距离通信自动化管控物联网场景。计讯工业数采网关TG462接口丰富、丰富协议库、支持主流PLC,对接第三方云平台,工业级设…

【软件测试面试题】面试官:你在工作中发现最有意义的bug?让他满意的回答......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试面试中被问的问…

iOS开发之自定义的framework添加第三方framework,lipo和ar命令看.o文件

由于需要将之前生成的mediapipe.framework添加到自己的framework中,但是很奇怪用普通的拖拽方式添加,项目工程在加载运行自己的framework时,总是找不到mediapipe.framework中的头文件,而只编译自己的framework时,也是可…

免费域名证书最新申请方式大全

目前市场环境下,可获得域名SSL证书的方式有很多,一般有付费和免费划分。对于想免费使用域名SSL证书的朋友,这里收集整理了几个常用的SSL证书申请方式。 对于SSL证书的用处,简单的来说,就是加密数据传输,使…

这么讲不怕你不懂负载均衡

现在前沿技术领域一个很有突破口和争议性的领域就是分布式系统以及高并发的解决与处理。而解决高并发其中一个很有意思的方法就是负载均衡。 那么,究竟什么才是负载均衡呢? 首先,维基百科是这样说的: 负载平衡(英语&a…

Java_多态

作者:爱塔居的博客_CSDN博客-JavaSE领域博主 专栏:JavaSE 作者简介:大三学生,希望跟大家一起进步 文章目录 目录 文章目录 一、多态概念 二、多态实现条件 三、重写 四、向上转型和向下转型 4.1 向上转型 4.2 向下转型 五、多态的…

社交电商平台的消费返利模式——共享购

实际上目前很多商家平台提到做电商平台,坚信最先第一个想到的是一些大型好像淘宝、某猫、某多多这些,但是随着社交媒体电商行业发展,大量商业运营模式及其商业平台,第一个的自然也就相对于交易返利模式的渠道,那大家在…

ubuntu中redis客户端与服务端命令、redis数据类型、字符串string、哈希hash、列表list、集合set、有序集合zset操作命令

一、NoSQL概述 NoSQL(not only SQL):泛指非关系型数据库,是一类新出现的数据库,不支持SQL语法,其存储的数据都是kv形式,存储结构与关系型数据库中的关系表完全不同 NoSQL产品种类:主要有Redis、MongoDB、…

超百万人用它生成3D头像,这项技术刚刚中选了SIGGRAPH Asia 2022

如何才能做一个和真人一样的 3D 头像? 先上传一张照片: 变成这样: 换一个人的照片: 再看一个例子: 眼镜也可以放进来: 在此基础上,还可以换上各种各样的发型、饰品,眼睛、帽子、发色…

Css定位

定位 为什么需要定位? 提问:以下情况使用标准流或者浮动能实现吗? 某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子。当我们滚动窗口的时候,盒子是固定在屏幕的某个位置的 所以: 浮动可以让多…

笨办法学 Python(第三版)习题 2: 注释和#号

参考书籍 代码 # -*- coding: utf-8 -*-# A comment, this is so you can read your program later. # Anything after the # is ignored by python.print("I could have code like this.") # and the comment after is ignored# You can also use a comment to &qu…