|
|
Python 内置的os.path模块是处理路径的基础工具,其中os.path.join()是专门用于路径拼接的核心函数,能自动适配操作系统的分隔符规则。
import os
# 1. 拼接基础路径和文件名
base_dir = "/home/user/projects"
file_name = "main.py"
full_path = os.path.join(base_dir, file_name)
print(full_path) # Linux/macOS输出:/home/user/projects/main.py
# Windows输出:\home\user\projects\main.py
# 2. 拼接多个路径片段
dir1 = "data"
dir2 = "2024"
file = "log.txt"
path = os.path.join(dir1, dir2, file)
print(path) # 输出:data/2024/log.txt(Linux)或 data\2024\log.txt(Windows)
# 3. 处理相对路径
relative_path = os.path.join("docs", "../README.md")
print(relative_path) # 输出:docs/../README.md(未规范化,仅拼接)
进阶方法:pathlib 模块(Python 3.4 + 推荐)
from pathlib import Path
# 1. 拼接基础路径和文件名
base_dir = Path("/home/user/projects")
file_path = base_dir / "main.py" # 使用/运算符拼接
print(file_path) # 输出:/home/user/projects/main.py
print(type(file_path)) # 输出:<class 'pathlib.PosixPath'>(Linux)或 WindowsPath
# 2. 拼接多个片段
data_path = Path("data") / "2024" / "log.txt"
print(data_path) # 输出:data/2024/log.txt
# 3. 拼接变量和字符串
user = "alice"
user_dir = Path("/home") / user / "documents"
print(user_dir) # 输出:/home/alice/documents
内置路径规范化:可通过resolve()方法自动解析相对路径、冗余分隔符:
# 规范化路径示例
relative_path = Path("docs") / "../README.md"
normalized_path = relative_path.resolve() # 解析为绝对路径并规范化
print(normalized_path) # 输出:/home/user/README.md(实际绝对路径)
集成文件操作:路径对象可直接调用exists()、mkdir()、open()等方法,无需额外转换:
# 路径对象直接操作文件
file = Path("data.txt")
if not file.exists():
file.touch() # 创建空文件
with file.open("w") as f:
f.write("Hello, Python!")
实战场景:
1.读取项目内配置文件
# 使用pathlib实现跨平台配置文件读取
from pathlib import Path
# 项目根目录(相对于当前脚本)
project_root = Path(__file__).parent.parent # __file__表示当前脚本路径
# 拼接配置文件路径
config_path = project_root / "config" / "app.conf"
# 读取配置文件
if config_path.exists():
with open(config_path, "r") as f:
config = f.read()
print("配置文件读取成功")
else:
print(f"配置文件不存在:{config_path}")
2.批量生成文件路径
# 生成多个日志文件路径
from pathlib import Path
log_dir = Path("logs")
# 创建日志目录(不存在则创建,parents=True创建多级目录)
log_dir.mkdir(exist_ok=True, parents=True)
# 拼接不同日期的日志文件路径
dates = ["2024-01-01", "2024-01-02", "2024-01-03"]
log_paths = [log_dir / f"{date}_app.log" for date in dates]
for path in log_paths:
print(path) # 输出:logs/2024-01-01_app.log 等
注意事项:
1.Windows 盘符处理:Windows 下拼接盘符路径需注意,Path("C:") / "Users" 会生成C:Users,而Path("C:/") / "Users" 生成C:/Users;
2.路径规范化:拼接后的路径若包含../、./等,建议使用os.path.normpath()(os.path)或resolve()(pathlib)规范化。 |
|