带有UNC路径的os.path.join()的行为是什么?

时间:2018-09-13 03:19:00

标签: python

有人可以解释加入路径的规则吗,我对这些结果感到困惑:

print(os.path.join('\\\\192.168.1.1\\A\\B', 'C\\D', '\\E')) #\\192.168.1.1\A\E, B,C,D are thrown away
print(os.path.join('\\\\192.168.1.1\\', 'C\\D', '\\E')) #\\192.168.1.1\\E, C, D are thrown away
print(os.path.join('\\\\192.168.1.1', 'C\\D', '\\E')) #\E, \\192.168.1.1 is thrown away
print(os.path.join('C:\\A\\B', 'C\\D', '\\E')) #C:\E, A, B, C, D are thrown away

2 个答案:

答案 0 :(得分:1)

绝对路径(例如'\\E'替换当前路径,而不是附加到当前路径。

答案 1 :(得分:0)

来自[Python 3]: os.path.join(path, *paths)

  

...
  如果某个组件是绝对路径,则所有先前的组件都会被丢弃,并且连接将从绝对路径组件继续。

     

在Windows上,遇到绝对路径成分(例如<?php $client = new SoapClient('http://services.chromedata.com/Description/7b?wsdl'); $account = ['number'=>"", 'secret'=>"", 'country'=>"US", 'language'=>"en"]; $vin = $_POST["b12"]; $result = $client->describeVehicle([ 'accountInfo' => $account, 'vin' => $vin ]); echo "<pre>"; var_dump ($result); echo "</pre>"; // optional ?> )时,不会重置驱动器号。如果组件包含驱动器号,则会丢弃所有先前的组件,并重置驱动器号。请注意,由于每个驱动器都有一个当前目录,所以r'\foo'代表相对于驱动器os.path.join("c:", "foo") C:而不是(c:foo)上当前目录的路径。

因此(在c:\foo中,最后一个绝对路径(而 UNC 路径是绝对的)则丢弃了它之前的任何其他路径。