刻意练习——Python基础Task07.文件与文件系统

刻意练习——Python基础Task07.文件与文件系统

一、使用pathlib模块操作目录

  • Purepath:代表并不访问实际文件系统的“纯路径”。有两个子类:PurePosixPath和PureWindowsPath。
  • Path:代表访问实际文件系统的“真正路径”。有两个子类:PosixPath和WindowsPath。
  • PurePath的基本功能
    1.程序可使用PurePath或它的两个子类来创建PurePath对象;程序会自动或主动定义实际返回的子类对象。
    2.如果再创建PurePath时不传入任何参数,系统默认创建代表当前路径的PurePath,相当于传入点号(.代表当前路径)。
    3.如果在创建PurePath时传入的参数包含多个根路径,则只有最后一个根路径及后面的子路径生效。
    4.如果在创建PurePath时传入的路径字符串包含多余的斜杠和点号,系统会直接忽略它们(但不会忽略两点,因为两点在路径中有实际意义——两点代表上一级路径)。
    5.PurePath对象支持各种比较运算符(实际上就是字符串的比较);不同风格的PurePath只能比较是否相等。
    6.斜杠(/)运算符:将多个路径连接起来(不同风格的连接运算符一样),但Windows输出时仍为反斜杠(\)。
    7.当使用str()将PurePath恢复成字符串对象时,会转换为对应平台风格的字符串。

PurePath的属性和方法

  • PurePath.parts:该属性返回路径字符串中所包含的各部分
  • PurePath.drive:该属性返回路径字符串中的驱动器盘符
  • PurePath.root:该属性返回路径字符串中的根路径
  • PurePath.anchor:该属性返回路径字符串中的盘符和根路径
  • PurePath.parents:该属性返回当前路径的全部父路径
  • PurePath.parent:该属性返回当前路径的上一级路径,相当于parents[0]
  • PurePath.name:该属性返回当前路径中的文件名
  • PurePath.suffixes:该属性返回当前路径中的文件所有后缀名
  • PurePath.suffix:该属性返回当前路径中的文件后缀名。相当于suffixes属性返回的列表的最后一个元素
  • PurePath.stem:该属性返回当前路径中的主文件名
  • PurePath.as_posix():将当前路径转换成UNIX风格的路径
  • PurePath.as_uri():将当前路径转换成URI。只有绝对路径才能转换,否则将会引发ValueError
  • PurePath.is_absolute():判断当前路径是否为绝对路径
  • PurePath.joinpath(*other):将多个路径连接在一起,作用类似于连接运算符
  • PurePath.match(pattern):判断当前路径是否匹配指定通配符
  • PurePath.relative_to(*other):获取当前路径中去除基准路径之后的结果
  • PurePath.with_name(name):将当前路径中的文件名替换成新文件名。如果当前路径中没有文件名,则会引发ValueError
  • PurePath.with_suffix(suffix):将当前路径中的文件后缀名替换成新的后缀名。如果当前路径中没有后缀名,则会添加新的后缀名
    ———————————————
    ———————————————

Path的功能和用法

  • Path是PurePath的子类,它除支持PurePath的各种操作、属性和方法之外,还会真正访问底层的文件系统。
  • Path同样提供了两个子类:PosixPath和WindowsPath
  • is_xxx()方法:判断该Path对应的路径是否为xxx。
  • exists()方法:判断该Path对应的目录是否存在。
  • iterdir()方法:返回当前目录下的所有文件和子目录。
  • glob()方法:获取上一级目录及其所有子目录下的文件。
  • read_bytes()方法:读取该Path对应文件的字节数据(二进制数据)。
  • read_text(encoding=None,errors=None)方法:读取该Path对应文件的文本数据。
  • write_bytes(data)方法:输出字节数据(二进制数据)。
  • Path.write_text(data,encoding=None,errors=None)方法:输出文本数据

二、使用os.path操作目录

  • exists()函数:判断该目录是否存在
  • getctime()函数:获取该目录的创建时间
  • getmtime()函数:获取该目录最后一次修改时间
  • geiatime()函数:获取该目录最后一次访问时间
  • geisize()函数:获取指定文件的大小

三、使用fnmatch处理文件名匹配

fnmatch模块可以支持文件名匹配,支持如下通配符:

  • (*):可匹配任意个任意字符
  • (?):可匹配任意个任意字符
  • [字符序列]:可匹配中括号里字符序列中的任意字符。该字符序列也支持中画线表示法。
  • [!字符序列]:可匹配不在中括号里字符序列中的任意字符
  • fnmatch.fnmatch(filename,pattern)函数:判断指定文件名是否匹配指定pattern
  • fnmatch.fnmatchcase(filename,pattern):该函数与上一个函数的功能大致相同,只是该函数区分大小写
  • fnmatch.filter(names,pattern):该函数对names列表进行过滤,返回names列表中匹配pattern的文件名组成的子集合
  • fnmatch.translate(pattern):该函数用于将一个UNIX shell风格的pattern转换为正则表达式pattern

四、打开文件

  • 内置open()函数:用于打开指定文件。格式如下:
open(file_name [,access_mode][,buffering])

文件对象支持如下常见的属性:

  • fiel.closed:该属性返回文件是否已经关闭
  • file.mode:该属性返回被打开文件的访问模式
  • file.name:该属性返回文件的名称
#以默认方式打开文件
f = open('open_test.py')
#所访问文件的编码方式
print(f.encoding) # cp936
#所访问文件的访问模式
print(f.mode) # r
#所访问文件是否已经关闭
print(f.closed) #False
#所访问文件对象打开的文件名
print(f.name) #open_test.py

open函数支持的文件打开模式(access_mode)

模式 意义
r 只读模式
w 写模式
a 追加模式
+ 读写模式,可与其他模式结合使用。比如r+代表读写模式,w+也代表读写模式
b 二进制模式,可与其他模式结合使用。比如rb代表二进制只读模式,rb+代表二进制读写模式,ab代表二进制追加模式

缓冲(buffering):若buffering参数(open()函数的第三个参数)是0(或False),那么该函数打开的文件就是不带缓冲的;如果是1,那么就是带缓冲的;如果大于1,则该整数用于指定缓冲区的大小(单位:字节)。

五、读取文件

  • read()方法:按字节或字符读取文件内容。在调用时可转入一个整数来指定最多读取多少个字节或字符。
  • close()方法:当程序读写完文件之后,推荐立即调用close()方法来关闭文件,避免资源泄露。(将close()方法调用在finally块中执行,能更安全地关闭文件)
  • 读取字符集与当前操作系统字符集不匹配的文件
    1.使用二进制模式读取,然后用bytes的decode()方法恢复
    2.利用open()函数来打开文件时通过encoding参数指定字符集
  • readline([n]):读取一行内容。如果指定了参数n,则只读取此行内的n个字符
  • readlines():读取文件内所有行

fileinput模板提供了如下函数可以把多个输入流合并在一起

  • fileinput.input(file=None,inplace=False,backup=",bufsize=0,mode=‘r’
    ,openhook=None)
    :
    该函数中的files参数用于指定多个文件输入流。该函数返回一个FileInput对象。

  • fileinput.filename():返回正在读取的文件的文件名

  • fileinput.fileno():返回当前文件的文件描述符(file descriptor),该文件描述符是一个整数

  • fileinput.lineno():返回当前读取的行号

  • fileinput.filelineno():返回当前读取的行在其文件中的行号

  • fileinput.isfirstline():返回当前读取的行在其文件中是否为第一行

  • fileinput.isstdin():返回最后一行是否从sys.stdin读取。程序可以使用“-”代表从sys.stdin读取

  • fileinput.nextfile():关闭当前文件,开始读取下一个文件

  • fileinput.close():关闭FileInput对象

使用fileinput模块来读取多个文件:

import fileinput
#一次读取多个文件
for line in fileinput.input(files=('info.txt','text.txt'))
	#输出文件名,以及当前行在当前文件中的行号
	print(fileinput.filename(),fileinput.filelineno(),line,end=' ')
#关闭文件流
fileinput.close()

文件迭代器:

  • 用for-in循环来遍历文件内容
  • 可以使用list()函数将文件转换成list列表,就想readlines()方法的返回值一样
  • sys.stdin类文件对象:使用for-in循环遍历sys.stdin来获取用户的键盘输入

管道输入:

  • 作用:将前一个命令的输出,当成下一个命令的输入
  • 语法:cmd1|cmd2|cmd3 ...

with语句(Task09.)

使用linecache随机读取指定行:

  • linecache可以读取用UTF-8字符集储存的文件
  • linecache.getline(filename,lineno,module_globals=None):读取指定模块中指定文件的指定行
  • linecache.clearcache():清空缓存
  • linecache.checkcache(filename=None):检查缓存是否有效

六、写文件

  • 以r+,w,w+,a,a+模式打开文件,则都可以写入。其中前三者文件指针位于文件开头处,后两者文件指针位于文件结尾处。
  • seek(offset[,whence]):把文件指针移动到指定位置(whence为0时也是默认值,文件从头开始计算;whence为1时,文件从当前位置开始计算;whence为2时,文件从结尾开始计算)
  • tell():判断文件指针的位置
  • write(str或bytes)方法:输出字符串或bytes。只有以二进制模式(b模式)打开的文件才能写入bytes
  • writelines(可迭代对象):输出多个字符串或多个bytes

七、os模块的文件和目录函数

与目录有关的函数

  • os.getcwd():获取当前目录
  • os.chdir(path):改变当前目录
  • os.fchdir(fd):通过文件描述符改变当前目录
  • os.chroot(path):改变当前进程的根目录
  • os.listdir(path):返回path对应目录下的所有文件和子目录
  • os.mkdir(path[,model]):创建path对应的目录,其中mode用于指定该目录的权限
  • os.makedirs(path[,mode]):其作用类似于mkdir(),但该函数的功能更加强大,它可以递归创建目录
  • os.rmdir(path):删除path对应的空目录
  • os.removedirs(path):递归删除目录
  • os.rename(src,dst):重命名文件或目录,将src重名为dst
  • os.renames(old,new):对文件或目录进行递归重命名

与权限相关的函数

  • os.access(path,mode):检查path对应的文件或目录是否具有指定权限
  • os.chmod(path,mode):更改权限
  • os.chown(path,uid,gid):更改文件的所有者
  • os.fchmod(fd,mode):改变一个文件的访问权限,该文件由文件描述符fd指定
  • os.fchown(fd,uid,gid):改变文件的所有者,该文件由文件描述符fd指定

与文件访问相关的函数

  • os.open(file,flags[,mode]):打开一个文件,并且设置打开选项,mode参数是可选的
  • os.read(fd,n):从文件描述符fd中读取最多n个字节,返回读到的bytes
  • os.write(fd,str):将bytes写入文件描述符fd中,返回实际写入的bytes长度
  • os.close(fd):关闭文件描述符fd
  • os.lseek(fd,pos,how):该函数同样用于移动文件指针
  • os.fdopen(fd[,mode[,bufsize]]):通过文件描述符fd打开文件,并返回对应的文件对象
  • os.closerange(fd_low,fd_high):关闭从fd_low(包含)到fd_high(不包含)范围的所有文件描述符
  • os.dup(fd):复制文件描述符
  • os.dup2(fd,fd2):将一个文件描述符fd复制到另一个文件描述符fd2中
  • os.ftruncate(fd,length):删除path对应的文件
  • os.link(src,dst):创建从src到dst的硬链接
  • os.symlink(src,dst):创建从src到dst的符号链接,对应于Windows的快捷方式

八、使用tempfile模块生成临时文件和临时目录

  • tempfile.TemporaryFile(mode=‘w+b’, buffering=None ,encoding=None ,newline=None, suffix=None,prefix=None, dir=None):创建临时文件。该函数返回一个类文件对象,也就是支持文件I/O
  • tempfile.NamedTemporaryFile(mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True):创建临时文件。该函数的功能与上一个函数的功能大致相同,只是它生成的临时文件在文件系统中有文件名
  • tempfile.SpooledTemporaryFile(max_size=0,mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None):创建临时文件。与TemporaryFile函数相比,当程序向该临时文件输出数据时,会先输出到内存中,直到超过max_size才会真正输出到物理磁盘中
  • tempfile.TemporaryDirectory(suffix=None,prefix=None, dir=None):生成临时目录
  • tempfile.gettempdir():获取系统的临时目录
  • tempfile.gettempdirb():与gettempdir()相同,只是该函数返回bytes
  • tempfile.gettempprefix():返回用于生成临时文件的前缀名
  • tempfile.gettempprefixb():与gettempprefix()相同,只是该函数返回bytes

如上函数都为高级别函数,支持自动清理,如tempfile.mkstemp()和tempfile.mkdtemp()函数为低级函数,则不支持。

发布了38 篇原创文章 · 获赞 1 · 访问量 818

猜你喜欢

转载自blog.csdn.net/weixin_45774706/article/details/102771642