chapter6.2、stringIO 、 bytesIO和路径操作
一、stringIO 和 bytesIO
stringIO
类文件对象,在内存中开辟一个文本模式的buffer,可以像文件一样操作
临时缓冲,不写入磁盘,close时关闭消失
tio.getvalue() 读取内容,不受指针影响,其他与文件操作相同
文件系统中没有相应的文件对象,没有fileno()
bytesIO
from io import BytesIO
与string的操作相同,在内存中开辟一个二进制模式的buffer,可以像文件对象一样操作
内存中的流,字符流和字节流,接口相同
可以使用with,文件对象和类文件对象你都支持上下文管理
磁盘操作慢于内存操作,内存足够时,优化思路是少落地,减少磁盘IO的过程,可以大大提高程序运
行效率
磁盘的缓存也可以使用,但不稳定,写入最好批量操作
file-like对象 ,类文件对象,操作接口统一
from sys impoort stdout ,stderr ,stdin
标准错误输出,在标准错误输出上输出颜色改变的字符串
标准输入,标准输出和标准错误输出都是类文件对象
二、路径操作
文件系统就是路径加文件本身
linux文件系统就是一颗目录树,一切皆文件,目录也是文件
Windows文件系统是分盘符的,
os.path 3.4之前使用os模块下的path方法
windows 的路径分割符默认是\\ 盘符是O:/, linux下默认是 /,最左边的 / 都是根
操作的类型是字符串,Linux下path.exists(), 来判断文件是否存在
abspath
dirname,文件目录,当前文件可以是目录
basename
path.spllitdrive
from os import path
3.4以后使用
pathlib,提供path对象来操作,包括目录和文件
from pathlib import Path
path() Winfows下===》WindowsPath('.'),Linux下PosixPath('.')
p.absolute() 绝对路径.
p / 'c' 此处 / 为运算符重载,结合为一个路径,字符串相除报语法错误,'a'/'b',可以用括号包装起来
p.parts 分解成元组,拆分路径,返回路径中的每个部分
joinpath 连接多个字符串到path对象中
str(p)获取路径字符串 bytes(p)获取路径字符串的bytes
路径中的\注意转义
p.parent 父路经,目录的逻辑父目录
p.parents 祖先路径,可迭代对象,可以获得所有的父路径,索引0是直接的父
目录组成部分
p2.name 指basename ,
p2.stem 不带类型的最后一个文件名,
p2.suffix 最后一个文件的后缀,
p2.suffixes多级扩展名列表
p2.with_name,名称替换 ,替换路径基名,并返回一个新的路径
p2.with_suffix() 替换扩展名,有则替换,无则补充扩展名。
p.cwd() 类上的对象可以直接调用类的某些操作方法,返回当前工作目录
p.home()返回家目录
判断方法
p.is_dir() 不存在判断都是False,存在返回True
p.is_file() 判断是否普通文件,存在返回True
p.is_symlink() 是否软链接
p.is_socket() 文件
p.is_block_device() 是否块设备
p.is_absolute() 是否直接路径,软连接,不解析
p.resolve() 返回新路径,就是当前path对象的绝对路径,如果是软连接,解析它
p.absolute() 获取绝对路径
p.exists() 目录或文件是否存在
rmdir() 删除空目录,有文件,不删,慎用删除
touch(mode=0o666,exist_ok=True) :
path('O:/test').touch()
touch的·参数exist_ok ,是否覆盖,存在也覆盖,会压制异常;touch改变文件atime
p.as_uri() 将路径返回成URI,例如"file:///etc/passwd"
p.mkdir(mode=0o777,parents=False,exist_ok=False),
parents,是否创建父目录:True等同于mkdir -p ,False时,父目录不存在抛异常FileNotFoundError
exist_ok 参数,Fasle时,路径存在,抛FileExistsError,True时,压制异常,忽略
迭代
iterdir,迭代目录,遍历目录所有内容,不递归,显示隐藏文件
通配符
glob(pattern) 通配给定的模式
rglob(pattern) 通配给定的模式,递归寻找
都返回 生成器对象
glob('*/*log') */下一层,; *.log *通配;**/下任意层寻找,相当于rglob
match(pattern)模式匹配成功返回True
stat() 相当于stat ,文件状态信息,跟踪软连接到文件本身
lstat 对符号链接只看连接文件本身的文件信息
文件操作
路径打开
Path.open(self, mode='r', buffering=-1, encoding=None, errors=None, newline=None)
方法与内建函数open类似,返回一个文件对象
p.write源代码中使用with,调用不用关文件
Path.read_text(encoding=None,errors=None)
Path.read_bytes :rb读取路径对应文件,
from pathlib import Path p = Path('./test_binary.txt') p.write_bytes(b'asd') p.read_bytes()
p = Path('./test_test.txt') p.write_text('absd') p.read_text()