Python文件操作(I/O):相关模块(一)

Python文件操作(I/O):相关模块(一)

一.fileinput模块

input()函数

fileinput 模块的 input()函数:能同时打开指定的多个文件,逐个读取文件中的内容

fileinput.input(files="filename1, filename2, ...", inplace=False, backup='', bufsize=0, mode='r', openhook=None)

返回一个 FileInput 对象:将多个指定文件合并之后的文件对象

files:多个文件的路径列表
inplace:指定是否将标准输出的结果写回到文件,默认值为 False
backup:指定备份文件的扩展名
bufsize:指定缓冲区的大小,默认为 0
mode:打开文件的格式,默认为 r(只读格式)
openhook:控制文件的打开方式(编码格式等)

input() 函数不能指定打开文件的编码格式

该函数读取的所有文件除非以二进制方式进行读取,否则该文件编码格式都必须和当前操作系统默认的编码格式相同,否则可能会出现 UnicodeDecodeError 错误

fileinput 对象通过 for 循环即可按次序读取多个文件中的数据
import fileinput
for line in fileinput.input(files=('a.txt','b.txt')):#使用for循环遍历 fileinput 对象
    print(line)    # 输出读取到的内容
fileinput.close()# 关闭文件流
youyouyouyouyouyou

youyouyouyouyouyou

读取文件内容的次序,取决于 input() 函数中文件名的先后次序

使用 fileinput 模块的 input() 函数前,一定要先引入 fileinput 模块

* 命名py脚本时,不要与python预留字,模块名等相同

fileinput 模块常用函数

函数名功能描述
fileinput.filename()返回当前正在读取的文件名称
fileinput.fileno()返回当前正在读取文件的文件描述符
fileinput.lineno()返回当前读取了多少行
fileinput.filelineno()返回当前正在读取的内容位于当前文件中的行号
fileinput.isfirstline()判断当前读取的内容在当前文件中是否位于第 1 行
fileinput.nextfile()关闭当前正在读取的文件,并开始读取下一个文件
fileinput.close()关闭 FileInput 对象
  • 文件描述符是一个文件的代号,其值为一个整数

二.linecache模块

linecache 模块:读取指定文件中的指定行

该模块常用来读取 Python 源文件中的代码

linecache 模块使用 UTF-8 编码格式来读取文件内容,使用该模块读取的文件,其编码格式也必须为 UTF-8,否则读取出的数据是乱码或报 SyntaxError 异常
import linecache
import string
print(linecache.getline(string.__file__, 1)) #读取string模块中第 1 行的数据
print(linecache.getline('a.txt', 2)) # 读取普通文件的第2行

"""A collection of string constants.

youyouyouyouyouyou

执行程序之前,保证文件是以 UTF-8 编码格式保存的(Python 提供的模块,通常编码格式为 UTF-8

linecache模块常用函数

getline()函数

linecache.getline(filename, lineno, module_globals=None)

读取指定模块中指定文件的指定行,仅读取指定文件时,无需指定模块

filename :用来指定文件名
lineno :指定行号
module_globals :指定要读取的具体模块名

当指定文件以相对路径的方式传给 filename 参数时,该函数以按照 sys.path 规定的路径查找该文件
clearcache()函数

linecache.clearcache()	

不再需要之前使用 getline() 函数读取的数据,使用该函数清空缓存
linecache.checkcache(filename=None)	

检查缓存的有效性

如果使用 getline() 函数读取的数据,在本地已经被修改,如果需要的是新的数据,使用该函数检查缓存的是否为新的数据

如果省略文件名,该函数将检查所有缓存数据的有效性

三.pathlib模块

pathlib 模块中包含的是一些类,操作对象是各种操作系统中使用的路径(如指定文件位置的路径,包括绝对路径和相对路径)

UNIX 操作系统和 Windows 操作系统路径的格式是不同的,主要区别在于根路径和路径分隔符

UNIX 系统的根路径是斜杠(/), Windows 系统的根路径是盘符(C:)
UNIX 系统路径使用的分隔符是斜杠(/),Windows 使用的是反斜杠(\)

继承关系

  • PurePath类 将路径看做普通的字符串,可以实现将多个指定的字符串拼接成适用于当前操作系统的路径格式,还可以判断任意两个路径是否相等

  • 使用 PurePath 操作的路径,并不会关心该路径是否真实有效

  • PurePosixPath 和 PureWindowsPath 是 PurePath 的子类,前者用于操作 UNIX 风格的路径,后者用于操作 Windows 风格的路径

  • Path类 操作的路径一定是真实有效的,提供了判断路径是否真实存在的方法

  • PosixPath 和 WindowPath 是 Path 的子类,用于操作 UNIX 风格的路径和 Windows 风格的路径。

PurePath 类构造方法

使用 PurePath 类时,在 UNIX 或 Mac OS X 系统上使用 PurePath 创建对象,该类的构造方法返回的是 PurePosixPath 对象

在 Windows 系统上使用 PurePath 创建对象,该类的构造方法返回的是 PureWindowsPath 对象

可以直接使用 PurePosixPath 类或 PureWindowsPath 类创建指定操作系统使用的类对象
Windows 系统上,使用 PurePath 类构造函数创建的是 PureWindowsPath 类对象

from pathlib import *
path = PurePath('a.txt')  # 创建PurePath,使用PureWindowsPath
print(type(path))

<class 'pathlib.PureWindowsPath'>
PurePath 创建对象时,支持传入多个路径字符串,会被拼接成一个路径格式的字符串

from pathlib import *
path = PurePath('YOU','CHAN','WILL') 
print(path)

YOU\CHAN\WILL
PurePath 类构造方法时,不传入任何参数,等同于传入点‘.’(表示当前路径)作为参数

from pathlib import *
path = PurePath()
print(path)

path = PurePath('.')
print(path)

.
.
传入PurePath 构造方法中的多个参数中,包含多个根路径,只会有最后一个根路径及后面的子路径生效

from pathlib import *
path = PurePath('C://','D://','a.txt','E://')
print(path)

E:\

对于 Windows 风格的路径,只有盘符(如 C、D等)才能算根路径
传给 PurePath 构造方法的参数中包含有多余的斜杠或点(示当前路径),会直接被忽略(..不会被忽略)

from pathlib import *
path = PurePath('C://../a.txt//.../..')
print(path)

C:\..\a.txt\...\..
PurePath 类重载各种比较运算符,同种风格的路径字符串可以判断是否相等,比较大小(比较字符串的大小)不同种风格的路径字符串则不行

from pathlib import *
print(PureWindowsPath('C://a.txt') == PureWindowsPath('c://a.txt'))

Unix风格的路径区分大小写,Windows风格的路径不区分大小写
PurePath 类对象支持直接使用斜杠(/)作为多个字符串之间的连接符

from pathlib import *
path = PurePosixPath('C://')
print(path / 'a.txt')

C:/a.txt
构建的路径,本质上是字符串,可以使用 str() 将 PurePath 对象转换成字符串

from pathlib import *
path = PurePosixPath('C://','a.txt')
print(str(path))

C:/a.txt

PurePath类实例属性和实例方法

类实例属性和实例方法名功能描述
PurePath.parts返回路径字符串中所包含的各部分
PurePath.drive返回路径字符串中的驱动器盘符
PurePath.root返回路径字符串中的根路径
PurePath.anchor返回路径字符串中的盘符和根路径
PurePath.parents返回当前路径的全部父路径
PurPath.parent返回当前路径的上一级路径,相当于 parents[0] 的返回值
PurePath.name返回当前路径中的文件名
PurePath.suffixes返回当前路径中的文件所有后缀名
PurePath.suffix返回当前路径中的文件后缀名
PurePath.stem返回当前路径中的主文件名
PurePath.as_posix()将当前路径转换成 UNIX 风格的路径
PurePath.as_uri()将当前路径转换成 URL。只有绝对路径才能转换,否则会引发 ValueError
PurePath.is_absolute()判断当前路径是否为绝对路径
PurePath.joinpath(*other)将多个路径连接在一起,作用类似于斜杠(/)连接符
PurePath.match(pattern)判断当前路径是否匹配指定通配符
PurePath.with_name(name)将当前路径中的文件名替换成新文件名。如果当前路径中没有文件名,则会引发 ValueError
PurePath.with_suffix(suffix)将当前路径中的文件后缀名替换成新的后缀名。如果当前路径中没有后缀名,则会添加新的后缀名
  • PurePath 的操作对象是字符串,因此实例属性和实例方法,实质是对字符串进行操作

Path类的功能和用法

和 PurPath 类相比,Path 类的最大区别就是支持对路径的真实性进行判断

Path 是 PurePath 的子类,Path 类除了支持 PurePath 提供的各种构造函数、实例属性以及实例方法之外,还提供判断路径字符串有效性的方法

可以判断该路径对应的是文件还是文件夹,如果是文件,支持对文件进行读写等操作

Path 的 2 个子类,分别为 PosixPath 和 WindowsPath,用于操作 UNIX 风格的路径和 Windows 风格的路径

关于Path 类属性和方法,见标准文档:
pathlib — Object-oriented filesystem paths
https://docs.python.org/3/library/pathlib.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值