Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2016 07:12:03

ivanzzz
Зарегистрирован: 2016-02-08
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Нормализовать путь

В параметре при запуске передаю путь к файлу

'C:\Qt\1.txt'
, но там 1 “\”, делаю os.path.normpath , но он возвращает
'C:\\Qt\x01.txt'
. Из за чего это может быть?

Офлайн

#2 Май 25, 2016 07:38:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Нормализовать путь

r'C:\Qt\1.txt'



Офлайн

#3 Май 25, 2016 12:24:28

ivanzzz
Зарегистрирован: 2016-02-08
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Нормализовать путь

Я передаю как параметр при запуске скрипта через консоль, сырые стоки не спасут. Или как-то можно в сырую строку превратить?

Офлайн

#4 Май 26, 2016 00:51:10

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Нормализовать путь

ivanzzz
Вы не понимаете, у вас уже есть правильная строка, в которой экранированы символы слеша.

>>> s = r'C:\Qt\1.txt'
>>> s
'C:\\Qt\\1.txt'
>>> print(s)
C:\Qt\1.txt
Если вы эту переменную s передатите , например, в open(), то лона будет правильна интерпретирована в системный путь.
>>> s
'C:\\Qt\\1.txt'
Это внутреннее представление питоном этой строки. Здесь все правильно



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Май 26, 2016 01:17:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Нормализовать путь

ivanzzz
Или как-то можно в сырую строку превратить?
Если передаёшь, там всё уже превращено. Однако x01 возникает тогда, когда ты сам это пишешь, а не передаёшь. В питоне последовательность \NUMBER в строке считается восьмеричным кодом символа. Но отображаются только 16-ричные коды символов, поэтому при выводе 8-ричный код преобразуется в 16-ричный.

>>> '\0'
'\x00'
>>> '\1'
'\x01'
>>> '\12'
'\n'
>>> '\123'
'S'
>>> '\1234'
'S4'
>>>



Офлайн

#6 Май 26, 2016 13:46:10

ivanzzz
Зарегистрирован: 2016-02-08
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Нормализовать путь

Как сделать чтобы не переводилось в 16 коды?

Офлайн

#7 Май 26, 2016 15:40:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

Нормализовать путь

ivanzzz
Как сделать чтобы не переводилось в 16 коды?
Правильно записать надо. Если ты записал \1, то и получаешь число. Поэтому писать надо либо \\1, либо в виде сырой строки (предпочтительнее).



Отредактировано py.user.next (Май 26, 2016 15:40:23)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version