2

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

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

4 回答 4

7

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

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

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

result = os.path.join(path, nameFile+".mat")
于 2016-08-03T11:51:59.563 回答
4

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

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'

既然您明确地将字符串文字附加.matnameFile,为什么不简单地nameFile使用.mat扩展名定义呢?如果这需要是动态的,只需像这样添加它:

extension = '.mat'
result = os.path.join(path, nameFile + extension)
于 2016-08-03T11:50:13.247 回答
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')
于 2016-08-03T11:50:07.843 回答
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
于 2016-08-03T11:50:34.130 回答