文件操作IO指引

pathlib模块

  • pathlib 一组处理操作系统上路径的类库
    • PurePath 逻辑路径,并不会检查是否有真正的文件或目录
      • PurePath 对象支持 / 作为运算符,win,unix皆用此
      • PurePosixPath, PureWindowPath
    • path
      • pathpurepath 子类,会真正访问底层的文件系统
        • 判断 Path 对应的路径是否存在,可以对文件进行读写
        • 获取 Path 对应路径的各种属性,如是否只读、是文件还是文件夹等)
      • PosixPath, WindowPath
  • 根路径
    • unix 风格 根路径 /
    • windows 根据路径是盘符 C:
  • pathlib.Path 对象
    • is_xxx() Path 对应的路径是否为 xxx
    • exists() 判断该 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) 判断指定文件名是否匹配指定 pattern
    • fnmatch.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就是其实现方式之一
  • 字符集不匹配解决方案
    • 使用二进制模式读取,然后用 调用bytes对象 的 decode() 方法恢复成字符串
      • 字节对象有decode方法可指定解码所使用的字符编码
      • 若读写编码不一样, 通常报 'gbk' codec can't decode,要么将文件写入时的编码改为gbk,要么打开时用写入时的编码
    • 利用 codecs 模块的 open() 函数来打开文件,该函数在打开文件时允许指定字符集
  • 文件对象读写方法
    • 读取
      • 程序要读取行,通常只能用文本方式来读取, 二进制没有行的概念
      • 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 模块

  • 生成临时文件和临时目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值