文件读写的原理
- 读写即“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) 用于判断是否为路径