python-- IO操作

一、什么是io?

IO – (input、output)指的是输入输出流
电脑使用cpu进行大量的运算,内存用来储存变量、运算以及各种操作。
内存RAM是一个瞬时设备,内存只要断电,数据将丢失。
所以我们需要一个持久化设备ROM (硬盘)保证断电的情况下也能存储数据
IO操作就是将内存中的瞬时数据持久化到磁盘上

二、iO的字符流操作(字符串、文档)

IO操作就是将内存中的瞬时数据持久化到磁盘上
所以我们这里说的输入-跟输出指的是对内存而言

一般一个完整的IO操作:
打开文件 --> 读取数据 —> 数据运算–> 数据的持久化(输出) --> 关闭资源
读取数据是将数据从一个持久化设备中读取到内存中
输出数据是将数据从内存中保存到磁盘上

python的io操作要用到 open( ) 函数

open函数的几个参数

从第三个参数开始就不用按照顺序去写,直接使用命名参数写下后面就行。

file 指定要打开的文件路径

mode= ‘r’ 模式默认为 rt 读文本文档,读字节的话修为 rb
如果写入文件必须改为w,如果没有该文件会自动创建
x,表示创建,如果已经存在,x就不会再创建,会报错

buffering=-1 读取到哪个位置,默认为 -1表示全部读完。可以指定读到第几行结束

encoding=None 编码格式

errors=None 错误参数,python 3 里没用

newline=None 换行参数

closefd=True

opener=None

1、输出操作(读取)

对内存而言是输出,对我们而言是读取

# 调用open函数打开一个文件
# open函数打开当前工作空间下的a.txt文件
# 第二个参数表示打开文件的模式
# 默认不写,则是r,表示读取文件
# 默认读取的数据是文本文档
# 如果打开的文本档是中文需要将编码格式转换一下
f = open("a.txt", "r",encoding = "utf-8")
# 调用read方法
msg = f.read()
print(msg)
# 调用close关闭io操作
f.close()

运行后
在这里插入图片描述

2、输入操作(写入)

对内存而言是输入,对我而言是写入。

msg = "每临绝境峰回路又转"

# 注意:如果向磁盘上写入数据,一定将mode设置为w
# 表示写入数据,输出数据
f = open("a.txt", "wt")

# 将数据写入到f对象住
f.write(msg)

# 关闭资源
f.close()

写入到文档末尾

msg = "在一个狂风大作的晚上,出现一个现象,什么现象呢?我不告诉你\n"

# mode=a,a append,表示在文档末尾再追加数据
# 不会覆盖原有数据
# 如果是mode='x',表示该文件必须在不存在的情况下,第一次打开,就会创建文件
f = open("a.txt", "w")

# 将数据写入到f对象住
f.write(msg)

# 关闭资源
f.close()

三、io字节操作()

1、读取字节文件到内存中

从持久性设备读到内存

# mode t 表示text open默认处理的文本文档
# 当我们想处理字节数据的,就需要
# 将t修改b binary 二进制
# open(file, mode="wt")

# 读取图片
f = open("a.png", mode="rb")

picture = f.read()

# 将该图片保存到另外一个地方去

ff = open("b.png", "wb")
ff.write(picture)

f.close()
ff.close()

2、文件备份

def copy_file(src, dest):
	fr = open(src, "rb")
	fw = open(dest, "ab")

	while True:
		# 一个10M为单位读取数据,防止读取过多,导致内存不够用,电脑蓝屏
		# fr.read()	# 不要这样读取数据
		content = fr.read(10 * 1024 * 1024)
		if content != b'':
			# 直接将数据读取到内存
			fw.write(content)
		else:
			break
	fr.close()
	fw.close()


x = input("请输入需要拷贝文件路径:")
y = input("请输入备份路径:")
copy_file(x, y)

四、with语句块

在IO操作的时候,发现IO一旦打开,必须关闭
关闭操作又很容易被程序员忘记!!
python为大家提供with
在python如果使用with 打开IO,则with结束时
自动调用io的close
以后Python的IO,推荐使用with !!!!

# 使用with打开IO,等with结束时,该IO流会自动调用close,关闭IO
with open("a.txt", "r") as f:
	print(f.read())

print("with语句块结束了……")

五、对象序列化与反序列化

当我们想要把一个对象给存到磁盘中的时候,需要把该对象序列化才能存储
pickle 模块里的四个方法:
pickle.dumps( ) # 把对象序列化成字节(二进制)数据

把ls存到内存,把ls对象从内存输入到磁盘

#pickle模块实现了用于序列化和
#反序列化Python对象结构的二进制协议
import pickle


#列表是一个对象,对象概念是一个逻辑单位
ls = [1,2,3,4,5,6]
#如果我们想存对象,就需要序列化
dumps = pickle.dumps(ls)

with open("C:\\Users\\hellen\\Desktop\\新建文件夹\\a.dat","bw") as f:
	f.write(dumps)

读ls,也就是从磁盘输出到内存
在这里插入图片描述
pickle.loads 显示被序列化后的对象
在这里插入图片描述

dump 是直接将对象存到内存与dumps不同
dumps是把对象序列化成字节数据

import pickle
ls = [1,2,3,4,5]

f = open("d:\\a.dat","wb")
pickle.dump(ls,f)

f.close()

pickle.load(file)
注释:
反序列化对象,将文件中的数据解析为一个python对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值