Путь к 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')