2024-简单点-优雅地用pathlib处理路径

pathlib 的优雅之处在于它将路径操作转化为面向对象的方法,使得代码更加简洁、易读和可维护。以下是几个使用 pathlib 的例子,展示了其优雅的特性:

  1. 创建和检查路径: 使用 Path 对象,你可以直接创建路径,然后检查其是否存在,无需使用字符串拼接和 os 模块的函数。
from pathlib import Path

   # 创建一个路径对象
   project_dir = Path('/path/to/your/project')
   
   # 检查路径是否存在
   if project_dir.exists():
       print("Project directory exists.")
   else:
       print("Project directory does not exist.")
  1. 操作路径: Path 对象支持多种操作,如创建、删除目录,以及文件操作。
# 创建多级目录
   new_subdir = project_dir / 'subdirectory'
   new_subdir.mkdir(parents=True, exist_ok=True)  # parents=True 创建所有父目录,exist_ok=True 不抛异常如果已存在

   # 创建文件
   file_in_subdir = new_subdir / 'file.txt'
   file_in_subdir.touch()  # 创建空文件

   # 拼接路径
   relative_path = file_in_subdir.relative_to(project_dir)
   print(f"Relative path to the file: {relative_path}")
  1. 读写文件: Path 提供了方便的方法来打开文件,进行读写操作
  with file_in_subdir.open('w') as f:
       f.write("This is the content of the file.")

   with file_in_subdir.open('r') as f:
       content = f.read()
       print(content)
  1. 文件和目录的属性: Path 对象可以方便地获取文件或目录的信息。
   print(f"File size: {file_in_subdir.stat().st_size} bytes")
   print(f"Last modified: {file_in_subdir.stat().st_mtime} seconds since epoch")
  1. 遍历目录: 使用 Path.iterdir() 可以迭代目录中的所有文件和子目录。
  for entry in project_dir.iterdir():
       print(entry.name)
  1. 删除文件和目录: 删除文件和目录非常直观。
   file_in_subdir.unlink()  # 删除文件
   if new_subdir.is_empty():  # 检查目录是否为空
       new_subdir.rmdir()  # 删除目录
  1. 文件前缀后缀、绝对路径和相对路径
from pathlib import Path

# 定义一个路径
path = Path('example.txt')

# 获取文件名(包含后缀)
filename = path.name
print(f"文件名(含后缀): {filename}")


# 获取文件名的前缀部分
stem = path.stem
print(f"文件名前缀(不带后缀): {stem}")

# 获取文件的后缀
suffix = path.suffix
print(f"文件后缀: {suffix}")


# 获取当前工作目录的绝对路径
current_working_dir = Path.cwd()
print(f"当前工作目录的绝对路径: {current_working_dir}")

# 将相对路径转换为绝对路径
relative_path = Path('example.txt')
absolute_path = relative_path.resolve()
print(f"相对路径转换为绝对路径: {absolute_path}")



# 假设有一个位于特定目录的文件路径
specific_file_path = Path('/path/to/some/directory/example.txt')

# 获取绝对路径
abs_path = specific_file_path.resolve()
print(f"绝对路径: {abs_path}")

# 获取前缀
prefix = specific_file_path.stem
print(f"文件名前缀(不带后缀): {prefix}")

# 获取后缀
file_suffix = specific_file_path.suffix
print(f"文件后缀: {file_suffix}")

在 pathlib 中,你可以通过 relative_to() 方法来获取一个路径相对于另一个路径的相对路径。这个方法返回一个新 Path 对象,表示从源路径到目标路径的相对路径。下面是一个例子:

假设我们有两个路径:

base_path 是基础路径,你想要计算其他路径相对于这个路径的相对路径。
other_path 是你想要将其转换为相对路径的路径。

from pathlib import Path

# 基础路径
base_path = Path('/home/user/documents/project')
# 其他路径
other_path = Path('/home/user/downloads/file.txt')

# 计算相对路径
relative_path = other_path.relative_to(base_path)

print(f"相对路径: {relative_path}")

在这个例子中,如果 base_path 是当前的工作目录,而 other_path 是一个要转换为相对路径的文件,relative_to() 将计算出从 base_path 到 other_path 的相对路径。

请注意,如果 other_path 不是 base_path 的子路径,relative_to() 会抛出一个 ValueError。在这种情况下,你可能需要先调整 base_path 或者使用绝对路径。

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值