python 路径处理与 linux 和 windows 之间尾随点('.')的差异
differences in python path handling with trailing dot ('.') between linux and windows
我在修复 python 脚本中的 cross-platform 错误时遇到了一个令人惊讶的结果。
(旁注: poetry 指定的相同 venv,otoh 这是基本的 python 库功能)
想要将一些 path-trunk 减少 header 部分,我使用了:
os.path.relpath('../data/what/ever/path/trunk.', '../data/')
对于 linux 产生:
'what/ever/path/trunk.'
而 windows 产生:
'what/ever/path/trunk'
(标记末尾缺少的点)
这是为什么,如何证明这种异常行为是合理的?
在 Windows 上,文件名中的最后一个 .
用于将文件扩展名与文件名的其余部分分开。如果扩展名是空的,那么.
是可选的;两种形式都引用同一个文件。
Linux 没有文件扩展名,因此结尾的 .
是文件名的有效部分,必须保留。
我在修复 python 脚本中的 cross-platform 错误时遇到了一个令人惊讶的结果。 (旁注: poetry 指定的相同 venv,otoh 这是基本的 python 库功能)
想要将一些 path-trunk 减少 header 部分,我使用了:
os.path.relpath('../data/what/ever/path/trunk.', '../data/')
对于 linux 产生:
'what/ever/path/trunk.'
而 windows 产生:
'what/ever/path/trunk'
(标记末尾缺少的点)
这是为什么,如何证明这种异常行为是合理的?
在 Windows 上,文件名中的最后一个 .
用于将文件扩展名与文件名的其余部分分开。如果扩展名是空的,那么.
是可选的;两种形式都引用同一个文件。
Linux 没有文件扩展名,因此结尾的 .
是文件名的有效部分,必须保留。