文件

打开文件

Python 内置了文件对象,通过 open 函数可以打开文件,返回文件对象。open 函数的语法声明如下:

1
2
3
4
5
6
7
8
file = open(filename,     # 文件名
mode='r', # 打开模式
buffering=-1,
encoding=None,
erroes=None,
newline=None,
closefd=True,
opener=None)

模式说明:

模式 说明 注意
r 读模式打开 文件必须存在
w 清空原内容,写模式打开 文件存在则覆盖
文件不存在则新建
a 追加模式打开 文件存在移到文件尾部
文件不存在则新建
b 二进制模式 需要与其他模式组合
+ 读写模式 需要与其他模式组合

例如:

  • rb :是以二进制打开读模式
  • r+ :文件可以读可以写(打开后默认文件指针是0,不清空文件,会覆盖已有的内容)
  • w+ :文件可以读可以写(打开后默认文件指针是0,先清空文件,直接覆盖已有的内容)
  • a+ :文件可以读可以写(打开后默认文件指针是文件末尾)
  • ab+ :文件可以读可以写,二进制模式(打开后默认文件指针是文件末尾)

等等

open 的其他参数:

buffering 表示缓冲模式,(1)-1 表示默认的缓存大小,即是8KB。(2)0 表示不缓存。(3)1 表示文本模式以换行来做缓冲结束。(4)大于1表示实际大小。

encoding 指定打开文本文件时时,字符的编码,例如: encoding = ‘utf-8’

with 语句打开文件

用 with 语句打开的文件,Python 会保证 with 语句执行完毕之后,正常关闭文件。格式如下:

1
2
3
with open('myfilename', 'r') as file:
xxxx
xxxxx

无论是否发生异常,都会执行完毕之后关闭打开的文件。

关闭文件

直接调用 file.close() 即可关闭文件。还没有写入文件实际内容的缓冲区的数据会被写入。

查询文件状态

  • closed 属性,表示文件是否已经被关闭,如果关闭了则返回 True 。
  • mode 属性,当前文件的打开模式
  • name 属性,文件名

读写文件

常见方法:

方法 说明
write(s) 用于往文件对象中写入数据
writelines(s) 用于将列表(或可迭代对象)中的字符串逐个写入文件(不添加换行符)
read([size]) 读取 size 字节(二进制文件)或者 size 个字符(文本文件);
忽略 size 则全部读取。返回读取结果
readline() 读取一行,返回读取结果
readlines() 读取所有行,返回读取到的字符串列表
seek(offset,[whence]) 移动文件指针到新位置,单位字节,可以是负数
0: 从文件头算起
1: 当前位置算起
2: 文件结尾算起
tell() 返回当前的文件指针
flush() 刷新缓冲区写入文件
truncate([size]) 在指定位置截断文件,位置后面的部分全部删除
不指定 size 则从当前文件指针位置开始截断

pickle 模块读写二进制

pickle 模块可以将对象进行序列化和反序列化,与读写二进制文件。

例如:

1
2
3
4
5
import pickle

pickle.dump(obj, file) # 写入data对象到二进制文件(任意对象类型都可以)
obj = pickle.load(file) # 读取二进制文件到对象(任意对象类型都可以)

目录操作

目录操作需要使用到 os 模块和 os.path 模块。(import os 之后也可以使用 os.path 子模块了)

os 模块的常用变量

  • name : 获取操作系统类型;值 nt 为 Windows 系统; posix 为 Linux、UNIX、MAC OS
  • linesep : 当前操作系统的换行符
  • sep : 当前操作系统的路径分隔符

os 模块常用方法

方法 说明
getcwd() 返回当前工作目录
listdir(path) 返回指定目录下的文件与子目录列表
mkdir(path[,mode]) 创建一个目录
makedirs(path1/path2/path3... [,mode]) 创建一个目录(多级的)
rmdir(path) 删除目录
removedirs(path1/path2/path3...]) 删除一个目录(多级的)
chdir(path) 改path为当前目录
remove(path) 删除文件
rename(src,dest) 重命名文件或目录
stat(path) 返回文件的所有属性
startfile(path [,operation]) 用默认关联的应用程序打开文件
chmod(path, mode) 改变文件权限
walk(top [,topdown [,onerror]]) 遍历目录树,返回一个元组
包含所有路径名、目录列表、文件列表
get_exec_path() 返回可执行文件的搜索路径
access(path, accessmode) 检测是否拥有指定权限。
可以的值有 R_OKW_OKX_OKF_OK

os.path 模块常用方法

方法 说明
abspath(path) 返回目录的绝对路径
exists(path) 判断文件或目录是否存在
join(path, *paths) 拼接目录与文件,得到新路径
basename(path) 从路径中提取文件名
dirname(path) 从路径中提取文件的目录路径(不含文件名)
isdir(path) 判断是否为目录
isfile(path) 判断是否为文件
isabs(path) 判断是否为绝对路径
splitext(path) 分离文件的扩展名
split(path) 分离路径,返回列表形式
splitdrive(path) 分离路径的驱动器名称
getsize(path) 返回文件的大小
getmtime(path) 返回文件的修改时间
getctime(path) 返回文件的创建时间
getatime(path) 返回文件的最后访问时间