文件读写的原理

  • 读写即“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)

用于判断是否为路径