Python路径和原始字符串

时间:2016-08-03 11:46:05

标签: python rawstring

我对路径+文件的名称有一些问题(这是函数的输入)。这有效:

result=r"D:\final\Res.mat"

这不起作用:

result="D:\\final\\Res.mat"

我想做的是以下(但也不起作用[Errno 22] invalid mode ('rb') or filename:):

path = "D:\final"
nameFile= "Res"

result=''+ path+ '\\' + nameFile'mat'+''

如何在不使用“”的情况下在名称前面加上“r”?或者,是否有可能不将r放在路径前面?

4 个答案:

答案 0 :(得分:3)

我的翻译建议你错误地认为第二个例子不起作用,因为

>>> r"D:\final\Res.mat" == "D:\\final\\Res.mat"
True

从组件构建文件路径的正确方法是使用os.path.join函数,该函数可以使用多个参数并可跨平台移植。我建议你试试像

这样的东西
result = os.path.join(path, nameFile+".mat")

答案 1 :(得分:1)

r前缀用于表示您希望将字符串评估为“原始”,保持反斜杠原样。

试试这个:

path = r"D:\final"
nameFile = "Res"

result = path + '\\' + nameFile + 'mat'

如您所见,我在包含非转义反斜杠的字符串表达式之前添加了r

要看到差异,请尝试:

print("\\")
print(r"\\")

(如果您使用的是Python2,则没有括号)

另外,我建议使用标准库的pathlib模块来正确处理路径。如果您尝试使代码可移植,这也会有很大帮助:

from pathlib import Path
(Path("D:/final") / path / nameFile).with_suffix('.mat')

答案 2 :(得分:1)

您需要使用原始字符串作为路径变量,或者转义反斜杠:

path = r"D:\final"

你可以在这里看到不同之处:

>>> "D:\final"
'D:\x0cinal'
>>> r"D:\final"
'D:\\final'

在第一种情况下'\f'是换页符0x0c。

另外,使用os.path.join()构建路径名:

import os.path

path = r"D:\final"
nameFile = "Res.mat"

result = os.path.join(path, nameFile)
>>> result
'D:\\final\\Res'

由于您明确将字符串文字.mat附加到nameFile,为什么不简单地使用nameFile扩展名定义.mat?如果这需要是动态的,只需将其添加为:

extension = '.mat'
result = os.path.join(path, nameFile + extension)

答案 3 :(得分:1)

  

我如何获得" r"在名称前面不使用" "

只需使用os.path.join

import os

path = r"D:\final"
nameFile= "Res.mat"

result = os.path.join(path, nameFile)
print(result)
>> D:\final\Res.mat