为什么“ os.path.join”和“ os.path.dirname(__ file__)”返回不同的分隔符?

时间:2018-06-22 08:20:02

标签: python python-3.x

我是初学者。 我的系统是win10 Pro,我使用的是python3.X。

我使用此代码来测试函数“ os.path.join()”和“ os.path.dirname()”。

private Dictionary<DeviceConnectionTypeEnum, IConnector> m_DeviceConnectorToType ..... <-you need to populate this dicionary

private IEnumrable<DeviceCredentialsModel>  getDevicesCredentials()
{
    #get from db of configuration
}

void connectToAllDevices()
{
    var devices = getDevicesCredentials();
    foreach(device in devices)
    {
        var encryptedPassword = device.password;
        var decryptedPassword = ...decrypt;
        var deviceConnectionTypeEnum = device.DeviceConnectionTypeEnum;
        IConnector deviceConnector = m_DeviceConnectorToType[deviceConnectionTypeEnum];

        deviceConnector.connect(device.ip, v.user, decryptedPassword);
    }
}

输出为:

  

E:/ test_opencv \ dateConfig.ini

我发现os.path.join()使用“ /”,但是os.path.dirname()使用“ \”,为什么?

如果我要使用相同的分隔符,则全部为'/'或'\',我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是因为__file__包含传入参数的脚本名称。

如果您运行

python E:/test_opencv/myscript.py

然后__file__确切包含传递给python的参数。 (Windows使用os.altsep作为/,因为它可以使用此备用分隔符)

一种好的修复方法是使用os.path.normpath用官方分隔符替换备用分隔符,删除双分隔符,...

print(os.path.join(os.path.normpath(os.path.dirname(__file__)),"dateConfig.ini"))

当运行不支持斜杠/将其视为选项开关的旧版Windows命令时,标准化路径可能会很有用。如果仅使用传递给open的路径,则不需要。