是的,pathlib
模块是 Python 3.4 引入的,提供了面向对象的方式来处理路径。它是 os.path
模块的现代替代品,具有更简洁、更直观的 API,并且支持路径操作的链式调用。
在 pathlib
中,路径是通过 Path
类表示的。许多 os.path
方法都有对应的 pathlib
方法。下面是常见的 pathlib
方法与 os.path
方法的对比。
1. 创建路径
os.path.join()
对应pathlib.Path
# os.path
import os
path = os.path.join("folder", "subfolder", "file.txt")
# pathlib
from pathlib import Path
path = Path("folder") / "subfolder" / "file.txt"
在 pathlib
中,你可以使用 /
运算符来连接路径,简洁且易读。
2. 检查路径是否存在
os.path.exists()
对应pathlib.Path.exists()
# os.path
import os
if os.path.exists("example.txt"):
print("Path exists.")
# pathlib
from pathlib import Path
path = Path("example.txt")
if path.exists():
print("Path exists.")
3. 检查路径是文件还是目录
os.path.isfile()
对应pathlib.Path.is_file()
os.path.isdir()
对应pathlib.Path.is_dir()
# os.path
import os
print(os.path.isfile("example.txt")) # True 如果是文件
print(os.path.isdir("example.txt")) # True 如果是目录
# pathlib
from pathlib import Path
path = Path("example.txt")
print(path.is_file()) # True 如果是文件
print(path.is_dir()) # True 如果是目录
4. 获取文件名和目录名
os.path.basename()
对应pathlib.Path.name
os.path.dirname()
对应pathlib.Path.parent
# os.path
import os
path = "/folder/subfolder/file.txt"
print(os.path.basename(path)) # file.txt
print(os.path.dirname(path)) # /folder/subfolder
# pathlib
from pathlib import Path
path = Path("/folder/subfolder/file.txt")
print(path.name) # file.txt
print(path.parent) # /folder/subfolder
5. 拆分路径
os.path.split()
对应pathlib.Path.parts
# os.path
import os
path = "/folder/subfolder/file.txt"
directory, filename = os.path.split(path)
print(directory) # /folder/subfolder
print(filename) # file.txt
# pathlib
from pathlib import Path
path = Path("/folder/subfolder/file.txt")
directory, filename = path.parent, path.name
print(directory) # /folder/subfolder
print(filename) # file.txt
6. 获取文件扩展名
os.path.splitext()
对应pathlib.Path.suffix
# os.path
import os
path = "file.txt"
filename, extension = os.path.splitext(path)
print(filename) # file
print(extension) # .txt
# pathlib
from pathlib import Path
path = Path("file.txt")
print(path.stem) # file
print(path.suffix) # .txt
7. 获取绝对路径
os.path.abspath()
对应pathlib.Path.resolve()
# os.path
import os
path = "example.txt"
absolute_path = os.path.abspath(path)
print(absolute_path)
# pathlib
from pathlib import Path
path = Path("example.txt")
absolute_path = path.resolve()
print(absolute_path)
8. 路径是否为绝对路径
os.path.isabs()
对应pathlib.Path.is_absolute()
# os.path
import os
print(os.path.isabs("/absolute/path")) # True
print(os.path.isabs("relative/path")) # False
# pathlib
from pathlib import Path
print(Path("/absolute/path").is_absolute()) # True
print(Path("relative/path").is_absolute()) # False
9. 获取路径大小
os.path.getsize()
对应pathlib.Path.stat().st_size
# os.path
import os
print(os.path.getsize("example.txt"))
# pathlib
from pathlib import Path
path = Path("example.txt")
print(path.stat().st_size) # 文件大小,单位为字节
10. 获取公共路径
os.path.commonpath()
对应pathlib.Path.commonpath()
# os.path
import os
paths = ["/folder/subfolder1/file.txt", "/folder/subfolder2/file2.txt"]
common = os.path.commonpath(paths)
print(common) # /folder
# pathlib
from pathlib import Path
paths = [Path("/folder/subfolder1/file.txt"), Path("/folder/subfolder2/file2.txt")]
common = Path.commonpath(paths)
print(common) # /folder
11. 获取相对路径
os.path.relpath()
对应pathlib.Path.relative_to()
# os.path
import os
print(os.path.relpath("/folder/subfolder/file.txt", "/folder")) # subfolder/file.txt
# pathlib
from pathlib import Path
path = Path("/folder/subfolder/file.txt")
relative_path = path.relative_to("/folder")
print(relative_path) # subfolder/file.txt
12. 创建目录
os.makedirs()
对应pathlib.Path.mkdir()
# os.makedirs()
import os
os.makedirs("new_folder/subfolder", exist_ok=True)
# pathlib
from pathlib import Path
path = Path("new_folder/subfolder")
path.mkdir(parents=True, exist_ok=True)
13. 文件/目录是否存在
os.path.exists()
对应pathlib.Path.exists()
# os.path
import os
if os.path.exists("example.txt"):
print("Path exists.")
# pathlib
from pathlib import Path
path = Path("example.txt")
if path.exists():
print("Path exists.")
总结
pathlib
提供了一种更现代和面向对象的方式来处理路径,代替了 os.path
模块的大部分功能。相比 os.path
,pathlib
使得路径操作更具可读性和灵活性,且能够利用面向对象的特性进行链式调用,因此是处理文件路径的更推荐方法。