Путь к Python и необработанные строки

У меня есть некоторые проблемы с именем путь + файл (который является входом для функции). Это работает:

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 ответа

Мой переводчик предполагает, что вы ошибаетесь в своем убеждении, что второй пример не работает, потому что

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

Правильный способ построения путей к файлам из компонентов - использование os.path.join функция, которая может принимать несколько аргументов и переносима на разные платформы. Я бы предложил вам попробовать что-то вроде

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

Вам нужно использовать необработанную строку для переменной пути или экранировать обратную косую черту:

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)

Как я могу получить "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

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')
Другие вопросы по тегам