Python pathlib 模块

文摘   科技   2024-11-03 23:41   上海  

点击蓝字,关注山海摸鱼人

目录:

  1. 什么是pathlib
  2. PurePath 类的用法
  3. Path 类的用法

什么是pathlib

pathlib是Python 3.4及以后版本中的一个标准库模块,它提供了一种面向对象的方法来处理文件系统路径。与传统的字符串处理方式相比,pathlib更加直观、易于理解和使用。通过这个模块,可以更方便的进行文件和目录的操作。

PurePath 类的用法

下面是关于pathlib模块中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()将当前路径转换成 URL。只有绝对路径才能转换,否则将会引发 ValueError
PurePath.is_absolute()判断当前路径是否为绝对路径。
PurePath.joinpath(*other)将多个路径连接在一起,作用类似于前面介绍的斜杠(/)连接符。
PurePath.match(pattern)判断当前路径是否匹配指定通配符。
PurePath.relative_to(*other)获取当前路径中去除基准路径之后的结果。
PurePath.with_name(name)将当前路径中的文件名替换成新文件名。如果当前路径中没有文件名,则会引发 ValueError
PurePath.with_suffix(suffix)将当前路径中的文件后缀名替换成新的后缀名。如果当前路径中没有后缀名,则会添加新的后缀名。

下面是一些示例代码:

from pathlib import PurePath

# 创建一个 PurePath 对象
path = PurePath('/home/user/documents/example.txt')

# 获取路径的各个部分
print(f"parts: {path.parts}")  # 输出: ('\\', 'home', 'user', 'documents', 'example.txt')

# 获取驱动器盘符
print(f"drive: {path.drive}")  # 输出: '' (对于 Unix 路径,通常为空)

# 获取根路径
print(f"root: {path.root}")  # 输出: '\'

# 获取锚点(驱动器盘符和根路径)
print(f"anchor: {path.anchor}")  # 输出: '\'

# 获取所有父路径
print(f"parents: {list(path.parents)}")  # 输出: [PureWindowsPath('/home/user/documents'), PureWindowsPath('/home/user'), PureWindowsPath('/home'), PureWindowsPath('/')]

# 获取上一级路径
print(f"parent: {path.parent}")  # 输出: '\home\user\documents'

# 获取文件名
print(f"name: {path.name}")  # 输出: example.txt

# 获取所有后缀名
print(f"suffixes: {path.suffixes}")  # 输出: ['.txt']

# 获取文件后缀名
print(f"suffix: {path.suffix}")  # 输出: .txt

# 获取主文件名
print(f"stem: {path.stem}")  # 输出: example

# 转换为 POSIX 风格路径
print(f"as_posix: {path.as_posix()}")  # 输出: '/home/user/documents/example.txt'

# 转换为 URI
try:
    print(f"as_uri: {path.as_uri()}")  
except ValueError as e:
    print(f"Error: {e}"# 输出: 'relative path can't be expressed as a file URI'

# 判断是否为绝对路径
print(f"is_absolute: {path.is_absolute()}")  # 输出: False

# 连接多个路径
new_path = path.joinpath('subfolder''file.txt')
print(f"joinpath: {new_path}")  # 输出:  '\home\user\documents\example.txt\subfolder\file.txt'

# 匹配通配符
print(f"match: {path.match('**/*.txt')}")  # 输出: True

# 获取相对路径
try:
    relative_path = path.relative_to('/home/user')
    print(f"relative_to: {relative_path}")  # 输出: documents\example.txt
except ValueError as e:
    print(f"Error: {e}")

# 替换文件名
new_name_path = path.with_name('new_example.txt')
print(f"with_name: {new_name_path}")  # 输出: \home\user\documents\new_example.txt

# 替换文件后缀名
new_suffix_path = path.with_suffix('.log')
print(f"with_suffix: {new_suffix_path}")  # 输出: \home\user\documents\example.log

Path 类的用法

pathlib的核心类是PathPathPurePath的子类,几乎所有的文件系统操作都可以通过这个类完成。Path类提供了许多方法来执行常见的文件系统任务,比如检查文件是否存在、创建目录、列出目录内容等。

下面是关于 pathlib 模块中 Path 类的一些常用实例属性和方法的表格,以及每个属性和方法的功能描述:

类实例属性和实例方法名功能描述
Path.exists()检查路径是否存在。
Path.is_dir()检查路径是否为目录。
Path.is_file()检查路径是否为文件。
Path.is_symlink()检查路径是否为符号链接。
Path.is_block_device()检查路径是否为块设备。
Path.is_char_device()检查路径是否为字符设备。
Path.is_fifo()检查路径是否为 FIFO(命名管道)。
Path.is_socket()检查路径是否为套接字。
Path.mkdir(mode=0o777, parents=False, exist_ok=False)创建目录。
Path.glob(pattern)根据模式匹配路径。
Path.rglob(pattern)递归地根据模式匹配路径。
Path.iterdir()迭代目录中的条目。
Path.read_text(encoding=None, errors=None)读取文件内容为文本。
Path.write_text(data, encoding=None, errors=None, newline=None)写入文本到文件。
Path.read_bytes()读取文件内容为字节。
Path.write_bytes(data)写入字节到文件。
Path.unlink(missing_ok=False)删除文件。(这个参数是在 Python 3.8 中引入的。如果是 Python 3.7 或更早的版本,需自行处理文件不存在的情况。)
Path.rmdir()删除空目录。
Path.rename(target)重命名文件或目录。
Path.replace(target)替换文件或目录。
Path.absolute()返回路径的绝对形式。
Path.resolve(strict=False)解析路径,返回绝对路径,解决符号链接。
Path.owner()获取路径的所有者用户名。
Path.group()获取路径的组名。
Path.chmod(mode)更改路径的权限模式。
Path.lchmod(mode)更改路径的权限模式(不跟随符号链接)。
Path.touch(mode=0o666, exist_ok=True)创建空文件或更新文件的访问和修改时间。
Path.samefile(other_path)检查两个路径是否指向同一个文件或目录。
Path.stat()获取路径的状态信息。
Path.lstat()获取路径的状态信息(不跟随符号链接)。

下面是一些示例代码:

from pathlib import Path

# 创建一个 Path 对象
file_path = Path('D:/shanhai.txt')

# 检查文件是否存在
if file_path.exists():
    print("文件存在")
else:
    print("文件不存在")

# 检查路径是否为文件
if file_path.is_file():
    print("路径是文件")
else:
    print("路径不是文件")

# 读取文件内容为文本
content = file_path.read_text(encoding='utf-8')
print(f"文件内容: {content}")

# 创建目录
new_directory = Path('D:/new_folder')
new_directory.mkdir(exist_ok=True)

# 列出目录内容
for item in new_directory.iterdir():
    print(f"目录内容: {item.name}")

# 写入文本到文件
shanhai_file = Path('D:/shanhai.txt')
shanhai_file.write_text('Hello, World!', encoding='utf-8')

# 删除文件
# shanhai_file.unlink()

# 重命名文件
new_name = Path('D:/new_example.txt')
file_path.rename(new_name)

# 获取文件状态信息
stats = new_name.stat()
print(f"文件大小: {stats.st_size} 字节")
print(f"最后修改时间: {stats.st_mtime}")

# 检查两个路径是否指向同一个文件
another_path = Path('D:/new_example.txt')
if new_name.samefile(another_path):
    print("两个路径指向同一个文件")
else:
    print("两个路径指向不同的文件")

山海摸鱼人
致力于记录美好之瞬间,追寻美好之明天。
 最新文章