Как избавиться от двойной обратной косой черты в строке пути файла Windows python?
У меня есть словарь:
my_dictionary = {"058498":"table", "064165":"pen", "055123":"pencil"}
Я перебираю его:
for item in my_dictionary:
PDF = r'C:\Users\user\Desktop\File_%s.pdf' %item
doIt(PDF)
def doIt(PDF):
part = MIMEBase('application', "octet-stream")
part.set_payload( open(PDF,"rb").read() )
Но я получаю эту ошибку:
IOError: [Errno 2] No such file or directory: 'C:\\Users\\user\\Desktop\\File_055123.pdf'
Он не может найти мой файл. Почему он думает, что в пути к файлу есть двойная обратная косая черта?
Ответы
Ответ 1
Двойная обратная косая черта не является ошибкой, python печатает/представляет ее так, как пользователь. Если a = r'raw s\tring'
и b = 'raw s\\tring'
(нет 'r' и явная двойная косая черта), то они оба представлены как 'raw s\\tring'
.
>>> a = r'raw s\tring'
>>> b = 'raw s\\tring'
>>> a
'raw s\\tring'
>>> b
'raw s\\tring'
Btw, ваш код четко отредактирован и несовместим между фактическим и тем, что вы разместили, так как существует очевидная разница в сообщении об ошибке и имени файла:
У вас есть:
PDF = r'C:\Users\user\Desktop\File_%s.pdf' %item
но вывод показывает:
'C:\\Users\\user\\Desktop\\Filed_055123.pdf'
Обратите внимание на дополнительный d в имени файла Filed_
vs File_
. Сообщение об ошибке может появляться из части, которую вы отредактировали.
Ответ 2
Двойная обратная косая черта обусловлена r
, необработанной строкой:
r'C:\Users\user\Desktop\File_%s.pdf' ,
Используется, потому что \
может вывести некоторые из символов.
>>> strs = "c:\desktop\notebook"
>>> print strs #here print thinks that \n in \notebook is the newline char
c:\desktop
otebook
>>> strs = r"c:\desktop\notebook" #using r'' escapes the \
>>> print strs
c:\desktop\notebook
>>> print repr(strs) #actual content of strs
'c:\\desktop\\notebook'
Ответ 3
Это не так. Двойная обратная косая черта - это всего лишь способ компьютерного высказывания обратной косой черты. Да, я знаю, что это звучит странно, но думайте об этом так - для представления специальных символов обратная косая черта была выбрана как экранирующий символ (например,\n означает символ новой строки, а не символ обратной косой черты, за которым следует символ n). Но что произойдет, если вы действительно хотите распечатать (или использовать) обратную косую черту (возможно, за ней следуют больше символов), но вы не хотите, чтобы компьютер рассматривал ее как символ экранирования? В этом случае мы избегаем обратной косой черты, то есть мы используем двойную обратную косую черту, чтобы компьютер понимал ее как единую обратную косую черту.
Это сделано автоматически в вашем случае из-за r
, который вы добавили перед строкой.
Ответ 4
Спасите себя от головной боли, вы также можете использовать другие косые черты.
если вы знаете, что я говорю. обратная косая черта.
который вы используете сейчас
PDF = 'C:\Users\user\Desktop\File_%s.pdf' %item
попытайтесь использовать
**
PDF = 'C:/Users/user/Desktop/File_%s.pdf'% item
**
он не будет рассматриваться как экранирующий символ.
Ответ 5
alwbtc @
Я смею сказать: "Я нашел ошибку..."
заменить
PDF = r'C:\Users\user\Desktop\File_%s.pdf' %item
doIt(PDF)`
с
for item in my_dictionary:
PDF = r'C:\Users\user\Desktop\File_%s.pdf' % mydictionary[item]
doIt(PDF)`
на самом деле вы действительно искали File_pencil.pdf(not File_055123.pdf).
Вы скопировали индексный словарь, а не его содержимое.
Эта тема форума может быть побочным эффектом.