os.path与pathlib模块对比

是的,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.pathpathlib 使得路径操作更具可读性和灵活性,且能够利用面向对象的特性进行链式调用,因此是处理文件路径的更推荐方法。

Scroll to Top