Python文件操作
打开文件
python 使用内置函数 open()打开文件,创建 file 对象,在系统中,只有存在 file 对象后,用户才能对文件进行相应的操作
- 文件名(name)为必选参数,name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
- 模式(mode)和缓冲(buffering)参数是可选的,mode:设置打开文件的模式(访问模式):只读,写入,追加等
- 该函数返回一个文件对象
- encoding:编码格式(推荐使用 UTF-8)
模式参数组合及其描述
| 模式参数组合 | 描述 |
|---|---|
| r+ | 以读写模式打开 |
| w+ | 以读写模式打开 |
| a+ | 以读写模式打开 |
| rb | 以二进制读模式打开 |
| wb | 以二进制写模式打开 |
| ab | 以二进制追加模式打开 |
| rb+ | 以二进制读写模式打开 |
| wb+ | 以二进制读写模式打开 |
| ab+ | 以二进制读写模式打开 |
写模式打开一个指定的文件(C:\Users\test.txt)
f 是一个文件对象,它与指定的文件建立了关联,很多文献称 f 为文件描述符
读取的文件与程序在相同文件夹中,直接提供文件名即可
以读模式打开文件时,文件必须存在,否则会引发异常
以写模式打开一个文件时,如果输出文件已经存在,那么它在写入新数据之前会被清空;如果文件不存在,会创建一个空文件
close()关闭文件对象
1 | f = open("python.txt", "r") |
with open 语法
1 | with open("python.txt", "r") as f: |
案例演示
1 | #1,打开文件 |
注意:
- 直接调用 write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
- 当调用 flush 的时候,内容会真正写入文件
读和写
1,read()方法,语法格式如下:
size——从文件中读取的字节数,如果未指定则读取文件的全部信息
返回值为从文件中读取的字符串
2,write()方法,语法格式如下;
write()方法将字符串写入一个打开的文件
write()方法不会自动在字符串的末尾添加换行符(‘\n’),需要人为在字符串末尾添加换行符,
返回值:写入的字符数或字节数
会读文件
1 | f = open("./data.txt") |
1 | with open("./data.txt") as f: |
with 后面跟上 open 函数的调用
as 后面跟上文件对象的命名,冒号,缩进的代码块放上对该文件对象的操作,这样在缩进的内容执行完毕后,文件就会被自动关闭,写法二能让代码更加简洁,不用单独调用 close 方法了
readline 方法
用于读取文件中所有行,直到结束符 EOF,并返回列表,包括所有行的信息,该列表可以由 python 的“for…in…"结构进行处理
1 | f = open("./data.txt", "r", encoding="utf-8") |
readlines 方法
1 | f = open("./data.txt", "r",encoding="utf-8") |
读取行
- 调用 read()会一次性读取文件的全部内容,如果文件有 10G,太耗内存,所以,保险起见,可反复调用 read(size)方法,每次最多读取 size 个字节的内容
- 调用 readline()可以每次读取一行内容,调用 readlines()一次读取所有内容并按行返回 list,因此,要根据需要决定怎么调用
- 如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用 read(size)比较保险;如果是配置文件,调用 readlines()最方便
unittest.TestCase 类的常见测试方法
操作汇总
| 操作 | 功能 |
|---|---|
| 文件对象 = open(file,mode,encoding) | 打开文件获得文件对象 |
| 文件对象.read(num) | 读取指定长度字节 不指定 num 读取文件全部 |
| 文件对象.readline() | 读取一行 |
| 文件对象.readlines() | 读取全部行,得到列表 |
| for line in 文件对象 | for 循环文件行,一次循环得到一行数据 |
| 文件对象.close() | 关闭文件对象 |
| with open() as f | 通过 with open 语法打开文件,可以自动关闭 |
创建目录
mkdir()方法,语法格式如下:
newdir——新建的目录名称,必须要带目录的完整路径
注意:要使用目录操作相关的内置函数,必须先导入 os 模块,然后才可以调用相关的功能
os.mkdir()方法应用如下所示:
显示当前工作目录
getcwd()方法,语法格式如下:
改变目录
chdir()方法,语法格式如下:
chdir——要改变的新的工作目录名称,需要带目录的完整路径
删除目录
rmdir()方法,语法格式如下:
rmdir——要删除的目录名称,需要带目录的完整路径
OS 模块提供的与目录相关的函数
| getcwd() | 返回当前的工作目录 |
|---|---|
| listdir(path) | 返回指定路径下的文件和目录信息 |
| mkdir(path [,mode]) | 创建目录 |
| makedirs(path1/path2…[,mode]) | 创建多级目录 |
| rmdir(path) | 删除目录 |
| removedirs(path1/path2…) | 删除多级目录 |
| chdir(path) | 把 path 设置为当前工作目录 |
| walk(top[,topdown[,onerror]]) | 遍历目录树,该方法返回一个元组,包括所有路径名,所有目录列表和文件列表 3 个元素 |
os.path 模块提供的与目录相关的函数
| abspath(path) | 用于获取文件或目录的绝对路径 |
|---|---|
| exists(path) | 用于判断目录或文件是否存在,如果存在则返回 true,否则返回 false |
| join(path,name) | 将目录与目录或者文件名拼接起来 |
| splitext() | 分离文件名和扩展名 |
| basename(path) | 从一个目录中提取文件名 |
| dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
| isdir(path) | 用于判断是否为路径 |
os.stat(path)获取基本信息
返回值是一个对象,通过这个对象的一些属性就可以获取这个文件的基本信息
基本语法
st_ctime 获取文件的创建日期(状态变化时间)
st_mtime 获取文件的修改日期
st_size 获取文件的大小
st_mode 获取文件的保护模式
st_ino 获取文件的索引号
st_atime 获取文件的最后一次访问时间
1 | import os |
使用递归算法遍历目录下所有文件
1 | import os |





