Escape-послідовності

Що таке escape-послідовності ?



escape послідовності - це поєднання символів, які складаються з похилої риски (\) зворотній слеш (бекслеш), за якою слідує буква або набір цифр.

Приклади escape-послідовностей:

Я попробував виконати(вивести) в інтерпретаторі за допомогою команди print текстовий рядок і перевірити як буде себе поводити коса риска(бекслеш).

В мене встановлений Python 3.6.8 тому при виконанні команди print потрібно ставити круглі дужки. Можливо в попередніх версія цього не потрібно але мені зустрічався код коли було написано без.

Коли в версії Python 3.6.8 ввожу без душок то зразу помилка (3.6.8: SyntaxError: Missing parentheses in call to 'print'. Did you mean print('')?).

Приклад:

print ('Приклад звичайного \тексту')

Результат:

Приклад звичайного \тексту

Коли похила риска знаходиться в середині рядка поміж букв чи на початку рядка і не використовуються спеціальні символи з нею то вона так і залишається похилою рискою.

Коли похила риска(бекслеш) знаходиться в кінці рядка то виникає помилка яка означає що немає чи відсутній спеціальний символ.

Приклад:

print ('Приклад звичайного тексту\')

Результат:

SyntaxError: EOL while scanning string literal

Якщо добавити другу похилу риску (бекслеш) перед escape-послідовністю то \n виведеться як звичайний текст.

Приклад з escape-послідовністю \n:

print ('Приклад \nзвичайного тексту')

Результат:

Приклад
звичайного тексту

Приклад якщо перед літералом ще одна коса риска:

print ('Приклад \\nзвичайного тексту')

Результат:

Приклад \nзвичайного тексту

Відповідно якщо потрібні наступні символи в тексті поміж лапок то потрібно поставити перед цим символом похилу риску(бекслеш).

Наприклад:

\\ - Символ зворотнього слеша(залишається один символ \)

\' - Апостроф(залишається один символ ')

\" - Лапка(залишається один символ ")

Дальше приклади escape-послідовностей:

\n - Початок нового рядка(Перехід на новий рядок)

Приклад:

print ('Приклад \nзвичайного тексту')

Результат:

Приклад
звичайного тексту

\r - Повернення каретки(курсору) (тобто надрукувати з початку наступного рядка)

Приклад:

values = range(0, 101)

for i in values:

print ("Complete: ", i, "%", end="\r")

Результат:

При друкуванні в інтерпретаторі Pythonвсе виглядає одну строку.

Complete: 0 % Complete: 1 % Complete: 2 % Complete: 3 %Complete: 4 % Complete: 5 % і тд.

Якщо добавити \n то буде переноситися все на новий рядок

0 % Complete:
1 % Complete:
і тд.

Я не докінця зрозумів як \r можна ще використати скоріш за все це відіграє роль при якомусь конкретному випадку (скоріш за все це правильність написання коду).

\t - горизонтальна табуляція (тобто каретка переміщається на відстань табуляції)

Приклад:

print ('Текст з та\tбуляцією')

Результат:

Текст з та буляцією

Перетворення коду в Юнікод

Як це розуміти ? Наприклад ви взяли звідкись чи надрукували звичайний (байтовий) рядок який ви могли отримати звідки завгодно, а дальше перетворите його з того кодування, яке характерне для джерела рядка(метаданні, заголовки і тд.)в рядок Unicode.

Ставши Unicode рядком він підтримує всі ті самі операції що і байтовий рядок но тепер рядок може зберігати великий діапазон символів.

Я знайшов такий варіант цього перетворення як (\u чи \U) але в мене не спрацювало і виникла помилка коли вставляєш дану escape-послідовність в середину тексту(Python 3.6.8).

В основному в мене виконалось перетворення коли символ u чи U стоїть перед лапками в яких знаходиться текст.

u - 16 бітовий символ Юнікоду в 16-річному представленні
U - 32 бітовий символ Юнікоду в 32-річному представленні

Приклад:

print(u'Текст який перетворюємо в Unicode')
print(U'Текст який перетворюємо в Unicode')

\uxxxx - 16 бітне hex значення типу Unicode

Для отримання символу потрібно ввести код символу після похилої риски.

Приклад:

print ('\u041d')

Результат:

Н

\Uxxxxxxxx - 32 бітне hex значення типу Unicode

Для отримання символу потрібно ввести код символу після похилої риски.

Приклад:

print ('\U000001a6')
print ('\U000001a5')
print ('\U000001a4')
print ('\U000001a3')
print ('\U000001a2')
print ('\U000001a1')
print ('\U000001a9')
print ('\U000001a7')
print ('\U000002a6')

Результат:

Ʀ
ƥ
Ƥ
ƣ
Ƣ
ơ
Ʃ
Ƨ
ʦ

Вертикальна табуляція

Позначається як \v і так в інтернеті написано.

Но в мене в Python 3.6.8 не працює замість цього отримую символ в вигляді квадратика.

Можливо при використанні ще додаткового коду разом з текстом або в якомусь інакшому прикладі ця escape-послідовність і спрацює.

\xhh - 16 бітне значення символу

Потрібно ввести код символу після похилої риски.

Приклад:

print ('\x23')
print ('\x24')
print ('\x25')
print ('\x26')

Результат:

#
$
%
&

\ooo - 8 бітне значення символу

Для отримання символу потрібно ввести код символу після похилої риски.

Приклад:

print ('\044')
print ('\045')
print ('\046')
print ('\047')

Результат:

$
%
&
'

\N{name} - Виводить символи за іменем з бази даних Unicod

Приклад:

print (u"\N{DAGGER}")
print (u"\N{DOUBLE DAGGER}")
print (u"\N{COLON}")

Результат:



:

\0 Null: двійковий 0 символ (не є ознакою кінця рядка)

Згадуються також такі escape-послідовності як \a \b \f но в мене в версії Python 3.6.8 вони не працюють або в кращому випадку виводять символ квадратика.

Коментарі

Популярні дописи з цього блогу

Встановлення pip

Встановлення Django