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方法关闭资源