python-IO流

IO流

什么是IO流

Input、Output Stream

IO流说的主要是计算机的输入和输出操作

常见的IO操作,一般说的是内存与磁盘之间的输入输出

IO流是一种常见的持久化技术

python操作IO流

使用open函数即可,open函数的主要目的是打开一个文件

基本语法格式如下:

open(filename, mode)

filename:包含了你要访问的文件名称或者路径。

mode:决定了打开文件的模式:只读,写入,追加等,默认文件访问模式为只读®

f = open("a.txt")在这里插入代码片

读取数据或者写入数据

msg = f.read()

IO流操作是非常宝贵的系统资源 ,使用完之后要关闭流f

f.close()

IO流的分类

根据数流动(站在内存的角度上)的方向分:

  • 输入流
  • 输出流

根据数据的类型分:

  • 字节流
  • 字符流

文件对象常用的方法

(1)read([size])

为了读取一个文件的内容,调用read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。

size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。

(2)write(string)

将 string 写入到文件中, 然后返回写入的字符数

(3)writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符

(4)close()

当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则

会抛出异常。

注意:close自动的调用flush进行最后的文件刷新

(5)flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入

字符流和字节流

字符流

mode = “t” 表示使用字符来操作IO流

字节流

mode = “b” 表示使用字节来操作IO流

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

案例:大文件的复制

from os import path

def copy_file():
	src = input("请输入要备份数据的路径:")
	dest = input("请输入保存备份数据的路径:") 
	f = open(src, "rb")

	filename = src[src.rfind("\\")+1:]
	f2 = open(path.join(dest, filename), "wb")

	while True:
		data = f.read(1024 * 1024)
		if data == b"":
			print("数据读取完成了")
			break
		else:
			f2.write(data)
	f.close()
	f2.close()


if __name__ == '__main__':

	copy_file()

对象序列化

什么叫对象序列化

将内存中的一个抽象概念、逻辑概念(对象)转换为字符或者字节数据的过程,就叫做对象序列化

pickle 模块

可以将对象转换为字节数据

  • dump 将对象序列化成为字节数据,并且保存到file中
    必填参数obj表示将要封装的对象
    必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”
  • dumps 将对象序列化成为字节数据
  • load 将一个file对象反序列化为对象
    必填参数file必须以二进制可读模式打开,即“rb”
  • loads 将一个字节数据反序列化为对象

json

用法类似于pickle,可以将对象转换为字符数据

json.dumps 将 Python 对象编码成 JSON 字符串
json.loads 将已编码的 JSON 字符串解码为 Python 对象

注意:json这个模块一般用来序列化字典对象,或者转换json数据,但是其他对象也是可以的

with语句块

with语句块中的代码执行完毕之后会自动进行流的关闭,不需要我们调用close()方法;with还可以很好的处理上下文环境产生的异常

with open('/usr/file.txt') as f:
    for line in f:
        print(line)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值