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

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

    5 Solutions collect form web for “Как избавиться от двойной обратной косой черты в строке пути файла Windows python?”

    Двойная обратная косая черта не является ошибочной, 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' 

    Кстати, ваш код четко отредактирован и несовместим между фактическим и тем, что вы разместили, поскольку есть очевидная разница в сообщении об ошибке и имени файла:

    У тебя есть:

     PDF = r'C:\Users\user\Desktop\File_%s.pdf' %item 

    но вывод показывает:

     'C:\\Users\\user\\Desktop\\Filed_055123.pdf' 

    Обратите внимание на дополнительный d в имени файла Filed_ vs File_ . Сообщение об ошибке может появляться из части, которую вы отредактировали.

    Двойная обратная косая черта происходит из-за r , raw string:

     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' 

    Это не так. Двойная обратная косая черта – это всего лишь способ компьютерного высказывания обратной косой черты. Да, я знаю, что это звучит странно, но думайте об этом так – для представления специальных символов обратная косая черта была выбрана как экранирующий символ (например, \ n означает новую строку, а не символ обратной косой черты, за которым следует символ n). Но что произойдет, если вы действительно хотите распечатать (или использовать) обратную косую черту (возможно, за ней следуют больше символов), но вы не хотите, чтобы компьютер рассматривал ее как символ экранирования? В этом случае мы избегаем обратной косой черты, то есть мы используем двойную обратную косую черту, чтобы компьютер понял, что это единственный обратный слэш.

    Это делается автоматически в вашем случае из-за того, что вы добавили перед строкой.

    спасите себя от головной боли, вы также можете использовать другие косые черты. если вы знаете, что я говорю. противоположная смотрящая косая черта.

    вы используете теперь PDF = 'C:\Users\user\Desktop\File_%s.pdf' %item

    попробуй использовать **

    PDF = 'C: /Users/user/Desktop/File_%s.pdf'% item

    ** он не будет считаться экранирующим персонажем.

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

    Python - лучший язык программирования в мире.