Обработка слешей в пути к файлам

Вот такой код на питоне получает ошибку:

name = 'C:\Users\Legion\Dropbox\PY\examples\mywc.py'
print(name)

ошибка:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

Я конечно могу написать так: r'C:\Users\Legion\Dropbox\PY\examples\mywc.py' и ошибка исчезнет. Но я думал, что как-то можно потом обработать строку в name перед принт, например: name2 = r'{}'.format(name), однако, все такие манипуляции приводят к такой же ошибке.

Получается, строка, записанная в name, уже безвозвратно "испорчена" попыткой преобразования?

Интересно, решилась бы проблема, если бы просто для путей в windows или для управляющих символов использовались бы отличные символы от "\"? Зачем так придумано, чтобы слеш использовался и в пути windows, и одновременно для управляющих символов?


Ответы (2 шт):

Автор решения: overxffff

Можно использовать pathlib

from pathlib import Path
path0 = Path('C:/Users/Legion/Dropbox/PY/examples/mywc.py')
path1 = Path('C:\\Users\\Legion\\Dropbox\\PY\\examples\\mywc.py')
path3 = Path(r'C:\Users\Legion\Dropbox\PY\examples\mywc.py')
print(path0.name)
print(path1.name)
print(path3.name)
print(f' {path0}\n {path1} \n {path3}')

mywc.py
mywc.py
mywc.py
C:\Users\Legion\Dropbox\PY\examples\mywc.py
C:\Users\Legion\Dropbox\PY\examples\mywc.py 
C:\Users\Legion\Dropbox\PY\examples\mywc.py
→ Ссылка
Автор решения: MarianD

Из вашего вопроса:

Получается, строка, записанная в name, уже безвозвратно "испорчена" попыткой преобразования?

Нет. Она не испорчена, она не существует, потому что это просто неправильная форма для записи строкового литерала.

Ошибка здесь:

name = 'C:\Users\Legion\Dropbox\PY\examples\mywc.py'
          ↑↑

\U это начало экранированной постепенности 8 шестнадцатеричных цифр для введения символа в форме Юникод, например \U0000042f для буквы Я.

Значит, после символа \U ожидается 8 шестнадцатеричных цифр, что в вашем случае не так — символ s после \U (в части \Users) не является такой цифрой.


Как это исправить?

Существует несколько возможностей — выберите любую из них:

  1. Вместо обратных слешов (\) используйте нормальные (/) - да, это возможно даже в Windows:

    name = 'C:/Users/Legion/Dropbox/PY/examples/mywc.py'
    
  2. Вместо одного обратного слеша (\) используйте всегда пару (\\) - это экранированная постепенность для одного слеша:

    name = 'C:\\Users\\Legion\\Dropbox\\PY\\examples\\mywc.py'
    
  3. Непосредственно перед строку включите символ r или R (от английского слова row, сырой), чтобы все символы интерпретировались буквально, а не как экранированные последовательности:

    name = r'C:\Users\Legion\Dropbox\PY\examples\mywc.py'
    
→ Ссылка