Подтвердить что ты не робот

Как избавиться от двойной обратной косой черты в строке пути файла 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'

Он не может найти мой файл. Почему он думает, что в пути к файлу есть двойная обратная косая черта?

4b9b3361

Ответ 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). Вы скопировали индексный словарь, а не его содержимое. Эта тема форума может быть побочным эффектом.