pathlib模块
- pathlib 一组处理操作系统上路径的类库
PurePath
逻辑路径,并不会检查是否有真正的文件或目录PurePath
对象支持/
作为运算符,win,unix
皆用此PurePosixPath, PureWindowPath
path
path
是purepath
子类,会真正访问底层的文件系统- 判断 Path 对应的路径是否存在,可以对文件进行读写
- 获取 Path 对应路径的各种属性,如是否只读、是文件还是文件夹等)
PosixPath, WindowPath
- 根路径
unix
风格 根路径/
windows
根据路径是盘符C:
- pathlib.Path 对象
is_xxx()
Path 对应的路径是否为 xxxexists()
判断该 Path 对应的目录是否存在iterdir()
返回path对应目录下所有子目录和文件 , 返回生成器glob()
获取 Path 对应目录及其子目录下匹配指定模式的所有文件, 用于文件查找,返回生成器read_bytes() / write_bytes(data)
读取(输出)该 Path 对应文件的字节数据(二进制数据)read_text(encoding=None, errors=None) / Path.write_text(data, encoding=None, errors=None)
读写文本数据
os.path模块
- os.path
- 与操作系统目录相关
- 模块下提供了一些可以操作,系统目录本身的一些方法,它下的操作会去寻找真实文件
- 方法指引
exists()
函数判断该目录是否存在getctime()、getmtime()、getatime()
函数取该目录的创建,修改,最后一次访问时间getsize()
取指定文件的大小os.path.dirname('abc/xyz/README.txt')
获取目录- os.path.samefile(‘ab.py’,’,/ab.py’) 判断是否为同一文件,前提两个文件必须在磁盘上存在
fnmatch模块
- 支持类似于 UNIX shell 风格的文件名匹配
- 支持如下通配符
* ? [字符序列] [!字符序列]
?
可匹配一个任意字符
- 函数指引
fnmatch.fnmatch(filename, pattern)
判断指定文件名是否匹配指定 patternfnmatch.fnmatchcase(filename, pattern)
区分大小写fnmatch.filter(names, pattern)
- names 为由任意字符串组成的可迭代对象
- 对 names 列表进行过滤,返回 names 列表中匹配 pattern 的文件名组成的子集合
fnmatch.translate(pattern)
将一个 UNIX shell 风格的 pattern 转换为正则表达式 pattern
内置open函数
- 打开文件模式功能
- 读写分离
- r 只读 文件指针位置开头
- w 只写 文件指针位置开头
- a 追加模式 文件指针位置结尾
+
读写模式
- 可读写
- w+ r+ a+
- b模式, 以二进制方式来读写文件内容,包括图片,音频,视频等
- 小节
- r或r+模式打开文件,被要求打开的文件是存在的,即r或r+不能创建文件
- 通常非文本文件使用b模式来操作
- 读写分离
- 函数签名
open(file_name [, access_mode] [, buffering])
返回文件对象- 文件对象常见属性
file.closed , mode, name
- 缓冲
- 计算机外设(比如硬盘、网络)的 I/O 速度远远低于访问内存的速度
- 使用缓冲的目的 不让内存中的程序大部分时间处于等待
- 若第三参数为0(或False),则打开的文件是不带缓冲区
- True 带缓冲, 若第三参数大于1, 则用于指定缓冲区的大小,单位字节
- 若第三参数为负数,则意味着使用默认缓冲区大小
- 缓冲区值惯例
- 单位字节
- 0 False 不用缓冲
- 1 True 使用缓冲
- 负数 使用默认缓冲大小
- 大于1 指定字节大小的缓冲
- 文件指针
- 文件对象提供了以下方法来操作文件指针
seek(offset[, whence])
- 当 whence 为 0 时(这是默认值),表明从文件开头开始计算
- 当 whence 为 1 时,表明从指针当前位置开始计算
- 当 whence 为 2 时,表明从文件结尾开始计算
- 即offset移动距离,whence 参照物所在的位置,从何而来
tell()
判断文件指针的位置
文件读写
- 文件对象(一般由open函数返回)
read(size: int)
方法- 读取宇节还是字符,则取决于是否使用了 b 模式
- 参数为指定最多读取多少个字符或字节
- 在调用 read() 方法时不传入参数,该方法默认会读取全部文件内容
- 字符编码不一致问题
- 使用 open() 函数打开文本文件时,总是使用当前操作系统的字符集
- Windows 平台,open() 函数总是隐式使用 GBK 字符集
- 通常将其它解为unicode,再将unicode转为指定编码
- Unicode 编码系统,可分为编码方式和实现方式两个层次,utf8就是其实现方式之一
- 使用 open() 函数打开文本文件时,总是使用当前操作系统的字符集
- 字符集不匹配解决方案
- 使用二进制模式读取,然后用 调用bytes对象 的 decode() 方法恢复成字符串
- 字节对象有decode方法可指定解码所使用的字符编码
- 若读写编码不一样, 通常报
'gbk' codec can't decode
,要么将文件写入时的编码改为gbk,要么打开时用写入时的编码
- 利用
codecs
模块的open()
函数来打开文件,该函数在打开文件时允许指定字符集
- 使用二进制模式读取,然后用 调用bytes对象 的 decode() 方法恢复成字符串
- 文件对象读写方法
- 读取
- 程序要读取行,通常只能用文本方式来读取, 二进制没有行的概念
readline([n])
读取一行内容。如果指定了参数 n,则只读取此行内的 n 个字符readlines()
读取文件内所有行
- 写入
- write(str 或 bytes):输出字符串或字节串。只有以二进制模式(b 模式)打开的文件才能写入字节串
- writelines(可迭代对象):输出多个字符串或多个字节串
os.linesep
代表当前操作系统上的换行符
- 读取
fileinput模块
- 作用 逐行读取多个文件
fileinput.input(files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None
- 该函数中的 files 参数用于指定多个文件输入流。该函数返回一个 FileInput 对象。
- fileinput 还提供了如下全局函数来判断正在读取的文件信息
fileinput.filename()
fileinput.fileno()
fileinput.lineno()
fileinput.filelineno()
fileinput.isfirstline()
fileinput.isstdin()
fileinput.nextfile()
fileinput.close()
关闭 FileInput 对象
- 缺点
- 在创建 FileInput 对象时不能指定字符集
- 文件对象本身就是可迭代
with 语句管理资源
- 要实现上下文管理协议
context_manager.__enter__()
进入上下文管理器自动调用的方法context_manager.__exit__(exc_type, exc_value, exc_traceback
退出
linecache 模块
- 从 Python 源文件中随机读取文件指定行, 并在内部使用缓存优化存储
linecache.getline(filename, lineno, module_globals=None)
:读取指定模块中指定文件的指定行linecache.clearcache()
linecache.checkcache(filename=None)
os 模块
- 目录函数
- 权限函数
- 文件访问
tempfile 模块
- 生成临时文件和临时目录