文件读写的原理
- 读写即“IO操作”
- 操作流程:
graph LR
A[Python操作文件]-->B[打开或新建文件]
B-->C[读\写文件]
C-->D[关闭资源]
文件读写操作
open()函数
- 按文件中数据的组织形式分类:
- 文本文件:存储字符文本;
- 二进制文件:数据内容以字节存储,比如mp3音频\jpg图片\doc文档
- 语法规则;
file=open(filename[,mode="r",encoding])
- file:被创建的文件对象,相对或绝对路径;
- filename:要创建或打开的文件的名称;
- mode:打开模式,默认为只读;
- t:文本模式
- x:写模式,新建一个文件,如果该文件已存在,则报错;
- r:以只读方式打开文件。文件指针将会放在文件开头;
- w;打开一个文件用于写入。存在则打开文件并从头编辑;不存在则新建文件;
- a:打开一个文件用于追加。存在则继续从文件的结尾编辑;如果该文件不存在,创建新文件进行写入;
- b以二进制的方式打开文件,需要与其他模式一起使用:
- rb二进制格式打开一个文件用于只读。文件指针将会放在文件的开头;
- wb以二进制格式打开一个文件只用于写入;
- +以读写的方式打开文件,需要与其他模式一起使用;
- encoding:文本文件中字符的编写格式,默认为utf-8;
- 注意:对文件操作结束后使用close()方法关闭系统资源;
常用文件操作方法
方法名 | 说明 |
read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有 |
readline() | 读取整行,包括 “\n” 字符。 |
readlines() | 读取所有行并返回列表,若给定sizeint>0, 返回总和大约为sizeint字节的行, 实际读取值可能比sizeint较大,因为需要填充缓冲区。 |
write(str) | 将字符串写入文件,返回的是写入的字符长度。 |
writelines(s_list) | 向文件写入一个序列字符串列表, 如果需要换行则要自己加入每行的换行符。 |
seek(offset[,whence]) | 移动文件读取指针到指定位置 |
tell() | 返回文件当前位置。 |
flush() | 刷新文件内部缓冲, 直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入 |
close() | 关闭文件。关闭后文件不能再进行读写操作 |
with语句
- 自动管理上下文资源,不论什么原因跳出with块,都能保证文件正确的关闭,以此来达到释放资源的目的;
- 语法结构:
with open('filename', 'r') as file:
代码块
- 使用with关键字系统会自动调用file.close()方法,with的作用等效于try/finally语句,不论什么情况都会执行文件关闭操作;
- with语句实现原理建立在上下文管理器之上;
- 上下文管理器是一个实现__enter__和__exit__方法的类;
- 使用 with 语句确保在嵌套块的末尾调用__exit__方法。
- 在文件对象中定义了__enter__和__exit__方法,即文件对象也实现了上下文管理器;
- 首先调用__enter__方法;
- 然后执行with语句中的代码;
- 最后调用__exit__方法;(即使出现错误,也会调用__exit__方法,也就是会关闭文件流)
- 举例:
with open("filename.txt","rb") as src_file:
with open("copy.txt","wb") as target_file:
target_file.write(src_file.read())
OS模块
- Python内置的与操作系统功能和文件系统相关的模块;
- 该模块中的语句的执行结果通常与操作系统有关;
- 在不同的操作系统上运行,得到的结果可能不一样;
- 可以对文件和目录进行操作;
- 举例:
- 调用系统程序
import os
os.system("notepad.exe")
//打开记事本
os.system("calc.exe")
//打开计算器
- 调用可执行文件
import os
os.startfile("可执行文件的exe文件")
- 常用函数:
函数名 | 描述 |
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) | 创建目录 |
makedirs(path1/path2…[,mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2…) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
s.renames(old,new) | 递归地对目录进行更名,也可以对文件进行更名 |
os.path模块
- 举例:
- 调用系统程序
import os.path
print(os.path.abspath(filename.txt))
//返回对应文件的绝对路径
- 常用函数:
函数名 | 描述 |
abspath(path) | 用于获取文件或目录的绝对路径 |
relpath(path[,start]) | 从start开始计算相对路径 |
exists(path) | 用于判断文件或目录是否存在, 如果存在返回True;否则返回False; |
join(path,name) | 将目录与目录或者文件名拼接起来 |
split() | 分离文件目录和文件名 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为路径 |