Выход из искаженного персонажа и python расширения для папок рабочего стола пользователя - PullRequest
0 голосов
/ 15 апреля 2020

При использовании os.path.expandvars в Python; У меня не было особых проблем с доступом к папкам «Документ» или «AppData», но при попытке доступа к папке «Рабочий стол» система выдает следующую ошибку:

Существует ли другая переменная, которая необходима, или это двойное экранирование "\ \" действительно нужен для рабочего стола против других мест?

if os.path.exists(os.path.join(os.path.expandvars("%userprofile%"),"Desktop"))==True:
print("yes")
               #No issue with this: returns True

if os.path.exists(os.path.join(os.path.expandvars("%userprofile%"),"Desktop\NF"))==True:
                                                                   ^

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 7-8: malformed \N character escape #Need help understanding why an escape is needed for this location ^

if os.path.exists(os.path.join(os.path.expandvars("%userprofile%"),"Documents\Videos"))==True: print("yes") #No issue with this: returns True

Папка рабочего стола NF существует и существовала до попытки доступа с помощью кода.

1 Ответ

0 голосов
/ 15 апреля 2020

Python использует последовательность \ N для обозначения символа юникода, идентифицируемого его именем:

print('\N{LATIN CAPITAL LETTER A}')
A

Следовательно, если строка содержит последовательность '\N', которая не начинается с '\N{name}' escape, SyntaxError повышается, если только '\N' не экранировано:

'Deskstop\\New'

или является частью необработанной строки

r'Deskstop\New'

или, если обратная коса sh является разделитель пути, замененный на передний sla sh

'Desktop/New' 

Я подозреваю, что os.path.join или его эквивалент pathlib справится с этой ситуацией правильно, если использовать его так:

os.path.join(os.path.expandvars("%userprofile%"),"Desktop", "New")

но я не могу быть уверен на 100%, потому что я не на Windows машине.

...