os.path.join函数的奇怪特性
示例代码:
path = os.path.join('output', '/tech/python.html')
print(path)
为什么path为/tech/python.html,而不是output/tech/python.html
在 os.path.join
中,如果某个路径组件是绝对路径(即以 /
或 \
开头的路径),那么它之前的所有路径组件都会被忽略,拼接会从该绝对路径组件开始。
在例子中:
```python
path = os.path.join('output', '/tech/python.html')
```
'output'
是相对路径组件。'/tech/python.html'
是一个绝对路径组件(因为它以/
开头)。- 当
os.path.join
遇到绝对路径组件时,它会丢弃之前的所有路径组件,并从该绝对路径开始拼接。
因此,最终的路径是:
```
/tech/python.html
```
为什么会这样设计?
我也不知道为什么,函数应该能处理各种异常情况,都能正确拼接, 结果为output/tech/python.html。 我花费了半小时来进行调试分析解决这个奇怪的特性问题。
如何避免这种情况?
不要使用绝对路径。即第二个参数及以后参数不要以"/"开头
总结
- 如果某个路径组件是绝对路径,
os.path.join
会忽略它之前的所有路径组件。 - 如果你不希望丢弃之前的路径组件,确保所有路径组件都是相对路径。