2017-05-08 47 views
1

所以,我制作了一个伪登录系统,并且遇到了几个与os.path.join相关的bug功能。Python os.path.join以(“any_path”,“c:”)作为输入的奇怪行为

当输入如“c:”或“d:”等输入作为用户名时,它似乎很奇怪,因为它会在根驱动器之前断开任何路径字符串。

所以,输入如:

>>> import os 
>>> os.path.exists(os.path.join(some_path, "this_is", "voided", "c:", "python34")) 
True 

将拥有第一个3条语句完全忽略。

有什么办法可以避免这种情况?

回答

0

似乎是一个已知bug

在Windows中,遇到一个绝对路径成分(例如,R“\富”)时的驱动器号不复位。如果组件包含驱动器号,则以前的所有组件都将被丢弃,并重置驱动器号。请注意,由于每个驱动器都有当前目录,因此os.path.join(“c:”,“foo”)表示相对于驱动器C上当前目录的路径:(c:foo),而不是c:\ foo 。

您可以尝试pathlib.PurePath.joinpath

+0

正是我一直在寻找,TY –

+0

@SynthestraRamicryth将其标记为正确的可能? – Vatsal