os.path.join仅取首参盘符问题及跨平台路径生成求助
问题原因
你遇到的问题是因为os.path.splitdrive(src)[1]返回的路径片段\byn\scripts\script.js以路径分隔符开头,属于绝对路径前缀。而os.path.join的规则是:如果拼接的参数是绝对路径,会直接忽略前面的路径参数,只保留这个绝对路径片段,所以最终结果丢失了C:\TEST\scripts部分。
解决方法
方案1:使用pathlib(推荐,跨平台友好)
pathlib是Python3.4+内置的面向对象路径处理库,自动适配不同操作系统的路径分隔符,代码更简洁:
import pathlib dst = pathlib.Path(r"C:\TEST\scripts") src = pathlib.Path(r"D:\byn\scripts\script.js") # 获取盘符后的相对路径(自动去除开头的路径分隔符) src_relative = src.relative_to(src.anchor) final_path = dst / src_relative print(final_path)
输出结果:
C:\TEST\scripts\byn\scripts\script.js
方案2:使用os模块兼容处理
如果坚持使用os模块,需要手动去除路径片段开头的分隔符,避免被识别为绝对路径:
import os dst = r"C:\TEST\scripts" src = r"D:\byn\scripts\script.js" _, src_after_drive = os.path.splitdrive(src) # 去掉开头的路径分隔符,转为相对路径片段 src_relative = src_after_drive.lstrip(os.sep) final_path = os.path.join(dst, src_relative) print(final_path)
输出结果:
C:\TEST\scripts\byn\scripts\script.js
内容的提问来源于stack exchange,提问作者user6304394
相关产品推荐
相关产品推荐

