python中IO流和对象序列化详解

目录
  • 一.IO流的操作
  • 二.对象序列化
  • 总结

一.IO流的操作

(1).什么是IO流(Input Output Stream)?
IO流说的主要是计算机的输入和输出操作。常见的IO操作,一般说的是内存。
IO流是一种常见的持久化(永久保存)技术:将数据从内存输出到磁盘保存下来
(2).IO流的分类
根据数据流动(站在内存的角度上来说):输入流、输出流
根据数据的类型:字符流、字节流
注:
字符流:字符只能操作有字符的数据(读到末尾是’’
字节流:字节是可以操作一切数据的(读到末尾是b’’),字节流操作大数据,不建议一次性读取
(3).python怎么操作IO流?使用open()全局函数,用于打开本地文件,返回值是一个IO流对象

#open()函数的格式
open(file, mode='r', buffering=-1, encoding=None,
errors=None, newline=None, closefd=True, opener=None)
mode模式有:
 	'r'       open for reading (default)
    'w'       open for writing, truncating the file first
    'x'       create a new file and open it for writing
    'a'       open for writing, appending to the end of the file if it exists
    'b'       binary mode
    't'       text mode (default)
    '+'       open a disk file for updating (reading and writing)
    'U'       universal newline mode (deprecated)
encoding编码使用:默认为none,使用的时候要用,encoding="utf-8"

通常open()函数要与read()函数一起使用,read()函数用于读取IO流对象的值,除了read()函数还有以下这些:

1.read(size=-1) #读取,参数可以有也可以没有
  readline() #按行读
  readlines() #按多行读
	#1.没有参数时,表示一次性读完
	>>> f=open("G:\Python\python练习\day09\a.txt",encoding="utf-8")
	>>> f.read()  #第一次读全部读完
		'我爱我的祖国'
	>>> f.read() #第二次读为空
		''
	>>> f.close() #自动执行一次flush
	#2.有参数时,通常用于读字节数据。
	   表示按照参数读,这样若是读字节数据时,对内存有利,且读取速度快,不会让电脑出现死机情况
	>>> f=open("G:\Python\python练习\day09\a.txt",encoding="utf-8")
	>>> f.read(2)  #第一次读
		'我爱'
	>>> f.read(2)  #第二次读
		'我的'
	>>> f.read(2) #第三次读
		‘祖国'
	>>> f.close() #自动执行一次flush
2.write(data)	#将内容写入到文件
	>>> f=open("a.txt","rb")
	>>> data=f.read(4)
	>>> data
		b'\xba\x8c\xe7\x8b'
	>>> f1=open("b.txt","wb")
	>>> f1.write(data) #将f的字节数据写入f1
		4
	>>> f1.close()
	>>> f.close()
	>>> f1=open("b.txt","rb") #验证b.txt文件写的是否是data
	>>> f1.read()
		b'\xba\x8c\xe7\x8b'
	>>> f1.close()
3.writelines()#将多个数据写入
4.flush()	#刷新缓存区
5.close()	#关闭file对象,注意close自动的调用flush进行最后的文件刷新

(4).with 语句块(与IO流搭配,可以自己去关IO流(close()))

格式:
	with open("user.dat","wb") as f:
		f.write(save_users)

二.对象序列化

(1).什么是对象序列化?
将对象(容器、对象等)这种抽象的概念转化成真正存储字符或字节数据的过程
(2).对象序列化怎么实现?两个模块:pickle模块、json模块
json模块:可以将对象转换为字符数据
pickle模块:可以将对象转换成字节数据
(3).两个模块详情:

一.pickle模块:将对象序列化成字节数据
	>>> import pickle
	>>> dir(pickle)
		'dump', 'dumps' ,'load', 'loads'
1.dumps() #将对象序列化成字节数据,一个参数,用于放对象
	>>> ls=[1,2,3,4]
	>>> import pickle
	>>> data=pickle.dumps(ls) #将ls序列化成字节数据存到data
	>>> data
		b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'
	>>> f=open("b.txt","wb")
	>>> f.write(data) #将序列化的字节数据写入b.txt文件
		16
	>>> f.close()
	>>> f=open("b.txt","rb") #验证b.txt文件写的是否是data
	>>> f.read()
		b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.'
	>>> f.close()
dump() #将对象序列化成字节数据,并且保存到file,两个参数,用于一个放对象,一个放存的文件
	>>>pickle.dump(ls,open("a.txt","wb"))
2.loads() #将一个字节数据对象反序列化成本身对象
	>>> f=open("b.txt","rb")
	>>> data=f.read()
	>>> pickle.loads(data)
		['a', 1, 2]
load() #将一个文件的字节数据对象反序列化成本身对象
	>>> pickle.load(open("b.txt","rb"))
		['a', 1, 2]
二.json模块:可以将对象序列化成字符数据
	>>> import json
	>>> dir(json)
		'dump', 'dumps', 'load', 'loads'
1.dumps() #将对象序列化成字符数据,一个参数,用于放对象
	>>> ls=[1,2,3,4]
	>>> data=json.dumps(ls)
	>>> f=open("b.txt","w")
	>>> f.write(data)
		12
	>>> f.close()
	>>> f=open("b.txt")
	>>> f.read()
		'[1, 2, 3, 4]'
	>>> f.close()
dump() #将对象序列化成字符数据,并且保存到file,两个参数,用于一个放对象,一个放存的文件
	>>> ls=['a','b',1,2]
	>>> json.dump(ls,open("b.txt","w"))
	>>> f=open("b.txt")
	>>> f.read()
		'["a", "b", 1, 2]'
	>>> f.close()
2.loads() #将一个字符数据对象反序列化成本身对象
	>>> f=open("b.txt")
	>>> data=f.read()
	>>> json.loads(data)
		['a', 'b', 1, 2]
load() #将一个文件的字符数据对象反序列化成本身对象
	>>> json.load(open("b.txt"))
		['a', 'b', 1, 2]

总结

到此这篇关于python中IO流和对象序列化详解的文章就介绍到这了,更多相关python IO流和对象序列化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于python的对象序列化介绍

    对象:是抽象的概念 如列表 元组 字典 集合 皆为对象 序列化:一种方法.目的:把对象存储在磁盘上(即,将对象转换为字节数据/字符数据). 这一过程我们借助序列化这一方法实现. 为什么需要序列化和反序列化这一操作呢? 1.便于存储.序列化过程将文本信息转变为二进制数据流.信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据.在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断

  • 序列化Python对象的方法

    问题 你需要将一个Python对象序列化为一个字节流,以便将它保存到一个文件.存储到数据库或者通过网络传输它. 解决方案 对于序列化最普遍的做法就是使用 pickle 模块.为了将一个对象保存到一个文件中,可以这样做: import pickle data = ... # Some Python object f = open('somefile', 'wb') pickle.dump(data, f) 为了将一个对象转储为一个字符串,可以使用 pickle.dumps() : s = pick

  • 详解python中的IO操作方法

    目录 python文件I/O raw_input函数 input函数 打开和关闭文件 open 函数 file对象的属性 close()方法 write()方法 read()方法 Python with open as函数 python文件I/O 打印到屏幕: 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. 读取键盘输入: Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: raw_input input raw_input函数

  • python中IO流和对象序列化详解

    目录 一.IO流的操作 二.对象序列化 总结 一.IO流的操作 (1).什么是IO流(Input Output Stream)?IO流说的主要是计算机的输入和输出操作.常见的IO操作,一般说的是内存.IO流是一种常见的持久化(永久保存)技术:将数据从内存输出到磁盘保存下来.(2).IO流的分类根据数据流动(站在内存的角度上来说):输入流.输出流根据数据的类型:字符流.字节流注:字符流:字符只能操作有字符的数据(读到末尾是’’)字节流:字节是可以操作一切数据的(读到末尾是b’’),字节流操作大数据

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • python中selenium库的基本使用详解

    什么是selenium selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等.selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid). S

  • python中subprocess实例用法及知识点详解

    1.subprocess这个模块来产生子进程,并且可以连接到子进程的标准输入.输出.错误中,还可以获得子进程的返回值. 2.subprocess提供了2种方法调用子程序. 实例 # coding:utf-8 import os # popen返回文件对象,同open操作一样 f = os.popen(r"ls", "r") l = f.read() print(l) f.close() Python subprocess知识点扩充 使用subprocess模块的目的

  • Python中的tkinter库简单案例详解

    目录 案例一 Label & Button 标签和按钮 案例二 Entry & Text 输入和文本框 案例三 Listbox 部件 案例四 Radiobutton 选择按钮 案例五 Scale 尺度 案例六 Checkbutton 勾选项 案例七 Canvas 画布 案例八 Menubar 菜单 案例九 Frame 框架 案例十 messagebox 弹窗 案例十一 pack grid place 放置 登录窗口 TKinterPython 的 GUI 库非常多,之所以选择 Tkinte

  • Python中线程threading.Thread的使用详解

    目录 1. 线程的概念 2. threading.thread()的简单使用 2.1 添加线程可以是程序运行更快 2.2 主线程会等待所有的子线程结束后才结束 3.查看线程数量 4.线程参数及顺序 4.1 传递参数的方法 4.2 线程的执行顺序 5. 守护线程 1. 线程的概念 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统独立调度和

  • Python中str is not callable问题详解及解决办法

    Python中str is not callable问题详解及解决办法 问题提出: 在Python的代码,在运行过程中,碰到了一个错误信息: python代码: def check_province_code(province, country): num = len(province) while num <3: province = ''.join([str(0),province]) num = num +1 return country + province 运行的错误信息: check

  • Python中__init__.py文件的作用详解

    __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件. 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能.我们在导入一个包时,实际上是导入了它的__init__.py文件.这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入. # package # __init__.py import re import urllib import sys impo

  • Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列表不适用!. a.flatten():a是个数组,a.flatten()就是把a降到一维,默认是按行的方向降 . a.flatten().A:a是个矩阵,降维后还是个矩阵,矩阵.A(等效于矩阵.getA())变成了数组.具体看下面的例子: 1.用于array(数组)对象 >>> from n

  • 对Python中Iterator和Iterable的区别详解

    Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器.为什么? 因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的.但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的. 判断是不是可以迭代,用Iterable from collections import Iterable isinstance({}, Iterab

随机推荐