python中的IO流及其对象序列化

IO流input output stream的缩写

侠义:常见的IO操作是指内存与磁盘之间的输入和输出的操作

io流的操作是一种持久化操作。将数据持久化到磁盘上

open全局函数:

第一个参数file:代表的是打开或者操作的文件的文件名或者路径

第二个参数mode:指的是打开的模式(默认是”r"表示字符输入流)

>>> from os import path
>>> path.abspath(".")
'D:\\pythonfile'
>>> open("a.txt")
<_io.TextIOWrapper name='a.txt' mode='r' encoding='cp936'>
>>> f.close()
>>> f = open("b.txt","r")
>>> f.read()
'哈哈哈哈哈哈哈哈哈哈'
>>> f.read()
''
>>> f.close()

流的分类

流动方向(站在内存角度) 输入流 输出流

数据保存在磁盘上是输出流

根据数据类型

字节流 字符流

字符流

>>> f = open("b.txt","w")
>>> f.write("heiheiheii")
10
>>> f.close()
>>> f = open("a.txt","w")
>>> f.write("xixixixixixiix")
14
>>> f.flush()
>>> f.write("xixixixixixiixkjvjjvk")
21
>>> f.flush()#刷新,将写的放进

流关闭会覆盖

如何解决这个问题??????????????

>>> f = open("b.txt",mode="a")
>>> f.write("喜喜喜喜喜喜")
6
>>> f.close()

本质上mode=”rt""wt"-----t指的是text字符流

>>> f = open("b.txt",mode="rt")
>>> f.read()
'哈哈哈哈哈嘿嘿嘿哈哈哈哈哈嘿嘿嘿kclk'
>>> f.close()
>>> f = open("b.txt",mode="at")
>>> f.write("哈哈哈哈哈嘿嘿嘿kclkhhhjjj")
18
>>> f.close()

字节流

b----binary

视频,图片。音频可执行文件的是二进制数据

mode=“b”

>>> f = open("b.jpg",mode="r")
>>> f.read()#报错
>>> f = open("b.jpg",mode="rb")
>>> f.read()

图片备份!!!!!!!!!!!!

>>> f = open("a.jpg",mode="rb")
>>> ff = open("b.jpg",mode="wb")
>>> ff.write(f.read())
9865
>>> f.close()
>>> ff.close()

注意:字节流操作大数据不建议一次读取!

字节可以操作任何数据 ,字符只能操作字符

>>> ff = open("b.txt",mode="rb")
>>> ff.read()
b'\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xba\xd9\xba\xd9\xba\xd9\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xba\xd9\xba\xd9\xba\xd9kclk\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xb9\xfe\xba\xd9\xba\xd9\xba\xd9kclkhhhjjj'
>>> ff = open("a.jpg",mode="rt")
>>> ff.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequenc

对象序列化

对象?:容器(列表,元组,集合,字典)

如果想要将对象支持化,保存在磁盘上,就需要对象序列化

对象序列化:将内存像对象这种抽象化的概率转换为真正的字符或者字节数存储在磁盘上

pickle模块

对象序列化为字节数据

>>> import pickle
>>> ls =[1.2,3,4,5,6]
>>> pickle.dumps(ls)
b'\x80\x04\x95\x16\x00\x00\x00\x00\x00\x00\x00]\x94(G?\xf3333333K\x03K\x04K\x05K\x06e.'
>>> data = pickle.dumps(ls)
>>> data
b'\x80\x04\x95\x16\x00\x00\x00\x00\x00\x00\x00]\x94(G?\xf3333333K\x03K\x04K\x05K\x06e.'
>>> f = open("D:\\pythonfile\\c.dat","wb")
>>> f.write(data)
33
>>> f.close()

loads-------将字节数据反序化为对象

>>> show = f.read()
>>> show
b'\x80\x04\x95\x16\x00\x00\x00\x00\x00\x00\x00]\x94(G?\xf3333333K\x03K\x04K\x05K\x06e.'
>>> pickle.loads(show)
[1.2, 3, 4, 5, 6]
>>> ll = pickle.loads(show)
>>> ll
[1.2, 3, 4, 5, 6]
>>> type(ll)
<class 'list'>

dump------将对象序列化为字节数据,并且保存在文件中

>>> pickle.dump(ls,open("D:\\pythonfile\\b.txt","wb"))

load-----将file反序列为对象

>>> pickle.load(open("D:\\pythonfile\\b.txt","rb"))
[1.2, 3, 4, 5, 6]
>>>

json模块

将对象序列化为字符数据

>>> d = {"username":"lili","age":18}
>>> import json
>>> json.dumps(d)
'{"username": "lili", "age": 18}'
>>> ss = json.dumps(d)
>>> type(ss)
<class 'str'>
>>> f = open("D:\\pythonfile\\b.txt","w")
>>> f.write(ss)
31
>>> f.close()

注意:json这个模块一般用来序列化字典对象,并不是只能序列化字典对象(py2中只能操作字典对象)

>>> ls
[1.2, 3, 4, 5, 6]
>>> json.dumps(ls)
'[1.2, 3, 4, 5, 6]

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

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

相关文章

机器学习算法那些事 | 使用Transformer模型进行时间序列预测实战

本文来源公众号“机器学习算法那些事”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;使用Transformer模型进行时间序列预测实战 时间序列预测是一个经久不衰的主题&#xff0c;受自然语言处理领域的成功启发&#xff0c;transfo…

WPS制作甘特图

“ 甘特图&#xff08;Gantt chart&#xff09;又称为横道图、条状图&#xff08;Bar chart&#xff09;&#xff0c;通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。” 设置基础样式 设置行高 设置宽度 准备基础数据 计算持续时间 …

轻松引流几百精准粉丝,抖音自动爆粉秘籍揭秘

对于做互联网的朋友们来说&#xff0c;引流是一个必不可少的环节。 掌握一种优秀的引流方法至关重要&#xff0c;这也可以视为我们的生计之源。 今天&#xff0c;我将向大家介绍一款全自动的引流工具——抖音全自动引流脚本软件。 这款软件的效果非常显著&#xff0c;它可以替…

R-CNN笔记

目标检测之R-CNN论文精讲&#xff0c;RCNN_哔哩哔哩_bilibili 论文背景 在该论文提出之前&#xff0c;主流的目标检测思路是&#xff1a; 将一幅图片划分成很多个区域&#xff0c;单独提取出来 对于每个区域使用传统的特征提取方法提取 提取结束后可以使用以为特征向量表示 可以…

计算方法实验2:列主元消元法和Gauss-Seidel迭代法解线性方程组

Task 即已知 y 0 0 , y 100 1 y_00,y_{100}1 y0​0,y100​1&#xff0c;解线性方程组 A y b \mathbf{A}\mathbf{y} \mathbf{b} Ayb&#xff0c;其中 A 99 99 [ − ( 2 ϵ h ) ϵ h 0 ⋯ 0 ϵ − ( 2 ϵ h ) ϵ h ⋯ 0 0 ϵ − ( 2 ϵ h ) ⋯ 0 ⋮ ⋮ ⋱ ⋱ ⋮ 0 0 ⋯…

C++命名空间和内联函数

目录 命名空间 内联函数 概述 特性&#xff1a; 命名空间 在C/C中&#xff0c;变量&#xff0c;函数和和类这些名称都存在于全局作用域中&#xff0c;可能会导致很多冲突&#xff0c;使用命名空间的目的是对标识符的名称进行本地化&#xff0c;避免命名冲突或名字污染&…

C语言函数和数组

目录 一.数组 一.一维数组&#xff1a; 1.一维数组的创建: 2.一维数组的初始化&#xff1a; 3.一维数组的使用 4.一维数组在内存中的存储&#xff1a; 二.二维数组&#xff1a; 三.数组越界&#xff1a; 四.数组作为函数参数&#xff1a; 二.函数 一.函数是什么&…

vue3对openlayers使用(加高德,天地图图层)

OpenLayers认识 WebGIS四大框架&#xff1a; Leaflet、OpenLayers、Mapbox、Cesium OpenLayers 是一个强大的开源 JavaScript 地图库&#xff0c;专注于提供可嵌入网页的交互式地图体验。作为一款地理信息系统&#xff08;GIS&#xff09;的前端开发工具&#xff0c;OpenLaye…

关于php foreach函数和变量覆盖

foreach函数是PHP中用于遍历数组或对象的函数&#xff08;且仅用于数组的遍历&#xff09;。它允许循环遍历数组中的每个元素&#xff0c;并对每个元素执行相同的操作。foreach语句的基本语法如下&#xff1a; foreach ($array as $value) {//执行的操作 }在这个语法中&#x…

C++ Thread 源码 观后 自我感悟 整理

Thread的主要数据成员为_Thr 里面存储的是线程句柄和线程ID 先看看赋值运算符的移动构造 最开始判断线程的ID是否不为0 _STD就是使用std的域 如果线程ID不为0&#xff0c;那么就抛出异常 这里_New_val使用了完美转发&#xff0c;交换_Val和_New_val的值 _Thr _STD exchange(_…

回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SAO-LSTM雪消融算法优化长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SAO-LSTM雪消融…

【Linux】进程的进一步认识

目录 进程的创建 fork函数初步认识 fork函数的返回值 写时拷贝 操作系统怎么知道什么时候要写时拷贝的呢&#xff1f; fork的常规用法 fork调用失败的原因 进程终止 进程的退出场景 进程常见退出方法 正常终止&#xff08;可以通过 echo $? 查看进程退出码&#xff…

Spring Boot从入门到实战

课程介绍 本课程从SpringBoot的最基础的安装、配置开始到SpringBoot的日志管理、Web业务开发、数据存储、数据缓存&#xff0c;安全控制及相关企业级应用&#xff0c;全程案例贯穿&#xff0c;案例每一步的都会讲解实现思路&#xff0c;全程手敲代码实现。让你不仅能够掌Sprin…

【Linux操作系统】:进程控制

目录 一、程序地址空间 1.C/C中的程序地址空间 2.进程地址空间 进程地址空间概念 什么是地址空间&#xff1f;什么是区域划分&#xff1f; 为啥要有地址空间&#xff1f; 地址空间的补充 二、进程创建 1.fork函数 2.写时拷贝 3.fork常规用法 4.fork调用失败的原因 …

Android冷启动优化

一、应用启动的三种状态 冷启动&#xff1a;系统不存在App进程&#xff08;APP首次启动或APP被完全杀死&#xff09;时启动APP&#xff0c;此时&#xff0c;APP的启动将经历两个阶段&#xff1a; 1、创建app进程&#xff1a;系统启动应用程序进程和虚拟机&#xff0c;创建app…

多线程(8)为什么需要Runnable接口

Runnable接口在Java中的多线程编程中起着关键作用&#xff0c;它提供了一种将执行代码与线程机制分离的方式。我们将通过分析Runnable接口的定义&#xff0c;以及如何与Thread类一起工作来详细解释它的必要性。 Runnable接口的定义&#xff1a; 在Java中&#xff0c;Runnable…

Linux 常用命令 1

Tips&#xff1a;终端热键ctrl shift 放大终端窗口的字体 ctrl - 缩小终端窗口的字体 注意区分大小写 查阅命令帮助信息&#xff1a; 1&#xff09;--help command –help(两个减号) 显示command命令的帮助信息 2&#xff09;man man command 查阅command命令的使…

MyEclipse打开文件跳转到notepad打开问题

问题描述 windows系统打开README.md文件&#xff0c;每次都需要右键选择notepad打开&#xff0c;感觉很麻烦&#xff0c;然后就把README.md文件打开方式默认选择了notepad&#xff0c;这样每次双击就能打开&#xff0c;感觉很方便。 然后某天使用MyEclipse时&#xff0c;双击RE…

分布式详解

文章目录 概述分布式开发优点和缺点分布式存在的作用分布式和集群的区别集群的特点集群脑裂BASE 理论BASE 理论的三要素CAP理论二段式满足cap理论的哪两个理论 分析下分布式强一致性、弱一致性、最终一致性衡量分布式系统的指标分布式下down机的处理⽅案分布式系统设计paxos和r…

matlab实现神经网络检测手写数字

一、要求 1.计算sigmoid函数的梯度&#xff1b; 2&#xff0e;随机初始化网络权重&#xff1b; 3.编写网络的代价函数。 二、算法介绍 神经网络结构&#xff1a; 不正则化的神经网络的代价函数&#xff1a; 正则化&#xff1a; S型函数求导&#xff1a; 反向传播算法&…