一、pathlib模块
该模块提供提供表示文件系统路径的类
该模块包括的类如图:
pathlib.PurePath(pathfile) 返回表示纯路径的类 只对pathfile执行操作,不实际访问pathfile表示的文件,也不管pathfile表示的文件是否存在 如果未提供pathfile,默认当前路径 pathlib.PurePosixPath(pathfile) PurePath 的子类,路径风格为UNIX pathlib.PureWindowsPath(pathfile) PurePath 的子类,路径风格为Windows Pathlib.Path(pathfile) PurePath 的子类,返回表示具体路径的类 可用于判断pathfile表示的文件是否存在,是否是文件或目录等 pathlib.PosixPath(pathfile) Path和 PurePosixPath的子类,路径风格为UNIX pathlib.WindowsPath(pathfile) Path 和PureWindowsPath的子类,路径风格为Windows
二、Path类
pathlib.Path.cwd() 返回当前目录路径的对象 pathlib.Path.home() 返回当前用户的家目录对象 pathlib.Path.stat() 返回包含有关此路径的信息的 os.stat_result 对象 如: p = pathlib.Path('/root') p.stat() pathlib.Path.chmod(mode) 改变文件的模式和权限,和 os.chmod() 一样 如: pathlib.Path('/root/1.txt').chmod(777) pathlib.Path.exists() 路径真实存在返回 True ,否则返回 False 如: p = pathlib.Path('/root/1.txt') p.exists() pathlib.Path.glob(pattern) 当路径指向目录时,返回该路径下满足 pattern 的所有子目录和文件的对象,可用for循环遍历 如: p = pathlib.Path('/root') for i in p.glob('*.txt'): print(i) pathlib.Path.group() 返回该文件所属的用户组,如果未找到用户组的gid,引发 KeyError 异常 如: p = pathlib.Path('/root/1.txt') p.group() pathlib.Path.is_dir() 路径是目录(或者目录的符号链接)返回 True,否则返回 False 如: p = pathlib.Path('/root') p.is_dir() pathlib.Path.is_file() 路径是文件(或这文件的符号链接)返回 True,否则返回 False 如: pathlib.Path('/root/1.txt').is_file() pathlib.Path.is_mount() 路径是挂载点返回True,否则返回False pathlib.Path.is_symlink() 路径是符号链接返回 True,否则返回 False pathlib.Path.is_socket() 路径指向Unix套接字(或指向Unix套接字的符号链接)返回 True,否则返回 False pathlib.Path.iterdir() 当路径指向目录时,返回该路径下所有子目录和文件,可用for循环遍历 p = pathlib.Path('/root') for i in p.iterdir(): print(i) pathlib.Path.mkdir(mode=0o777, parents=False, exist_ok=False) 创建目录,权限为mode paretns: 默认False,父目录不存在引发 FileNotFoundError 异常 exist_ok: 默认False,目录已存在引发 FileNotFoundError 异常 pathlib.Path.open(mode ='r', buffering=-1, encoding=None, errors=None, newline=None) 和内置函数 open() 类似,以mode权限打开文件 pathlib.Path.rename(dst) 目录或文件重命名,返回指向目标的新Path实例 pathlib.Path.rmdir() 删除目录,目录必须为空 pathlib.Path.touch(mode=0o666, exist_ok=True) 创建文件,权限为mode exist_ok: True表示文件已存在,并且其修改时间已更新为当前时间,则成功,否则引发 FileNotFoundError 异常
三、文件读写
一) 文件打开
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 打开文件并返回文件对象,文件无法打开引发 OSError 异常 mode: 可选参数,打开文件的模式,默认'r' buffering: 可选参数,设置缓冲策略的整数,默认-1 encoding: 可选参数,解码或编码文件的编码,仅在文本模式下使用,默认编码取决于平台 errors: 可选参数,如何处理编码和解码错误 newline: 可选参数,换行符 file.close() 关闭文件 file.mode 返回打开文件的访问模式 file.name 返回打开文件的文件名 file.closed 文件关闭返回 True,否则返回 False
mode可选的参数
mode |
意义 |
---|---|
t |
文本模式(默认) |
x |
写模式,新建文件,如果该文件已存在则失败 |
b |
二进制模式 |
+ |
打开用于更新(读取与写入) |
r |
只读模式(默认) |
r+ |
读写模式 |
w |
写模式,若文件已存在,清除已有内容,若文件不存在,则新建 |
w+ |
读写模式,若文件已存在,清除已有内容,若文件不存在,则新建 |
|
追加写入模式,若文件已存在,不会清除文件已有内容,若文件不存在,则新建 |
|
读写模式,若文件已存在,不会清除文件已有内容,若文件不存在,则新建 |
二) 文件读取
1 按字节或字符读取文件内容
read(n) 每次读取文本n个字节或字符 没有传入n参数,默认读取文本全部内容 打开文件时,mode='b'则表示按字节读取文件,否则表示按字符读取文件
示例
按字符读取文件内容
from pathlib import Path path = Path('/root/1.txt') try: f = open(path,'r') while True: #按字符读取文本内容,每次读取4个字符 cha = f.read(4) if not cha: break else: print(cha) except FileNotFoundError as E: print(E.args) except NameError as E: print(E.args) except Exception as E: print(E.args) #关闭文件,回收占用的资源 finally: f.close()
按字节读取文件内容
from pathlib import Path path = Path('/root/1.txt') try: f = open(path,'rb') while True: #按字节读取文本内容,每次读取2个字节 byte = f.read(2) if not byte: break else: print(byte) except FileNotFoundError as E: print(E.args) except NameError as E: print(E.args) except Exception as E: print(E.args) finally: f.close()
2 按行读取文本内容
必须是文本模式,即mode='t',因为二进制模式(mode='b')没有行的概念 readline(n) 若未传入参数n,则每次读取文本一行(包括换行符'\n') 若传入参数n,则每次读取一行的n个字符 readlines() 读取文本所有行(包括换行符'\n'),返回所有行组成的列表
示例
每次读取一行
from pathlib import Path path = Path('/root/1.txt') try: f = open(path,'r') while True: line = f.readline() if not line: break else: print(line) except FileNotFoundError as E: print(E.args) except NameError as E: print(E.args) except Exception as E: print(E.args) finally: f.close()
读取所有行
from pathlib import Path path = Path('/root/1.txt') with open(path, mode='r') as f: lines = f.readlines() for line in lines: print(line)
三) 文件写入
seek(offset, whence) 把文件的指针移动到指定位置 offset:指针偏移量 whence:默认whence=0,表明指针从文件开头计算;whence=1,表明指针从文件当前位置计算,whence=2,表明指针从文件末尾计算 tell() 判断文件指针的位置 write(str|bytes) 文件里写入字符串或字节串 writelines(iterable) 文件里写入多个字符串或字节串
示例
from pathlib import Path import os path=Path('/app/python/scripts/9.txt') try: f = open(path, mode='a+') f.write('\t《登高》\t') f.writelines((os.linesep, '【作者】杜甫 【朝代】唐'+os.linesep, '风急天高猿啸哀,渚清沙白鸟飞回。'+os.linesep, '无边落木萧萧下,不尽长江滚滚来。'+os.linesep, '万里悲秋常作客,百年多病独登台。'+os.linesep, '艰难苦恨繁霜鬓,潦倒新停浊酒杯。'+os.linesep,)) except FileNotFoundError as E: print(E.args) except NameError as E: print(E.args) except Exception as E: print(E.args) finally: f.close()