Python中IO流

IO流

1、什么是IO流?
I(input) O(output)Stream
主要说的就是将数据读入内存或者内存输出的过程中使用的技术
常见的IO流操作,一般说的是【内存】与【磁盘】之间的输入输出。
2、作用
持久化数据,保证数据不再丢失!
3、IO的分类

一、根据数据流动方向(粘在内存的角度来说)
	r——输入流
	w——输出流
	
二、根据数据的类型
	b——字节流
	t——字符流

4、python如何操作IO流

全局函数 open 打开一个IO操作

open函数主要的目的是打开一个本地的文件

open函数的使用中,需要了解以下几个参数:

open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  • 【file】:表示一个文件的具体路径,或者要打开的文件名称
  • 【mode】 : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。
  • 【buffering】 : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
  • 【encoding】: 一般使用utf8

mode中:

    "r"——read表示输入流
	
	"w"——write表示输出流
	
	“t"——表示字符流     #使用字符操作IO流
	
	"b"——表示字节流    #使用字节操作IO流   (字节流操作大数据的,不建议一次性读取)
	
	"a"——表示追加输出

IO流的使用

>>>f = open(path,"r")     #path是路径
>>>msg = f.read()
>>>f.close()     #最后关闭IO流,一定要关闭!

5.IO读写文件的步骤:
(1) io读取文件

io读取文件的步骤:

建立待读取的文件(读取文件,文件必须是存在的)
打开文件
读取文件
输出读取的内容
关闭资源

(2) io写入文件

Io写入文件的步骤:

建立待写入的文件(文件不一定存在)
获取文件的父级目录
判断父级目录是否存在
父级目录不存在,要创建父级目录
打开文件
建立写入的内容
写入内容
关闭资源

举个例子:

写入:
>>> a="Python的IO流操作这么神奇"
>>> f=open("E://python学习.txt","w")
>>> f.write(a)
16
>>> f.close()
>>>

在这里插入图片描述

读出:
>>> f=open(r"E://python学习.txt","r")
>>> print(f.read())
Python的IO流操作这么神奇
>>> f.close()
>>>

更多:

>>>f = open(file,"r") #f对象就是python IO对象
	方法:
	>>>read(size=-1)  	 #读取
	>>>readline()  		 #读取一行数据
	>>>readlines() 		 #读取多行数据
	
	>>>write(data)		 #写入到文件
	>>>writelines()      #将多个数据写入	
	
	>>>flush 			 #刷新缓存区
	>>>encodind()  		 #编码
	
	>>>colse()	#关闭File对象,注意close自动的调用flush进行最后文件的刷新
	>>>closed() #判断流是否关闭
  • 注意:
    IO流如果不使用的话一定要关闭!不关闭的话会造成资源的占用。
    拷贝数据时,为了避免因为目标过大而导致死机,应使用read参数来控制每次拷贝数据的多少,也可以用循环来做。
def copyFile(src, dest):
	"""文件的拷贝"""
	src_file = open(src, "br")
	dest_file = open(dest, "bw")

	# 当文件时,如果文件是字节文件,要注意大文件的拷贝
	# 如果是大文件,一定不要直接拷贝,防止内存溢出

	while True:
		content = src_file.read(1024)    #读取文件中1024字节
		if content == b'':    #对判断是否读完
			print("文件读取完成")
			break
		else:
			dest_file.write(content)   #将读出的内容写入另一个文件

	src_file.close()
	dest_file.close()
	

if __name__ == '__main__':
	src = input("请输入您要拷贝的文件路径:")
	dest = input("请输入你要保存的新路径:")
	copyFile(src, dest)

对象序列化

1.什么是对象序列化?
将内存的一个抽象概念/逻辑概念(对象)转换成字节或者字符数据的过程。

2.这里介绍两个用法——pickle、json

1、pickle模块(二进制和对象之间的序列化)

1、dump——将对象序列化称为字节(二进制)数据,并且保存到file中

2、dumps——将数据序列化成为字节数据

3、load——将一个file对象反序列化

4、loads——将一个字节数据反序列化为对象

2、json模块(字符串和对象之间的序列化)

1、dump——将对象序列化称为字符数据,并且保存到file中

2、dumps——将数据序列化成为字符数据

3、load——将一个file对象反序列化

4、loads——将一个字符数据反序列化为对象

pickle和json的用法是一样的,要注意的是json这个模块一般用来序列化字典对象,或者转换json数据,但是其它对象也是可以的。

with语句块

python 每当打开一个IO,最后一定要关闭资源

	with open("a.txt", "r") as f:
		# 操作IO流,不用关闭
	with语句块打开的IO
	with结束时自动调用close方法关闭资源
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值