Python3之文件

一、pathlib模块

该模块提供提供表示文件系统路径的类

 

该模块包括的类如图:

Python3之文件

 

 

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

意义

文本模式(默认)

x

写模式,新建文件,如果该文件已存在则失败

b

二进制模式

+

打开用于更新(读取与写入)

r

 只读模式(默认)

r+

读写模式

w

写模式,若文件已存在,清除已有内容,若文件不存在,则新建

w+

读写模式,若文件已存在,清除已有内容,若文件不存在,则新建

a

追加写入模式,若文件已存在,不会清除文件已有内容,若文件不存在,则新建

a+

读写模式,若文件已存在,不会清除文件已有内容,若文件不存在,则新建

二) 文件读取

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()

 

上一篇:赶紧用pathlib,一刻也不要耽误


下一篇:MATLAB中ismember函数