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()
原文地址:https://www.cnblogs.com/rprp789/p/9581709.html