Ігнараванне (адключэнне) экраніруючых паслядоўнасцяў у Python з неапрацаванымі радкамі

Бізнэс

...',"..."У Python, калі да гэтых радковых літэралаў дадаць адзін з наступных сімвалаў, значэнне стане радком без пашырэння паслядоўнасці бегства.

  • r
  • R

Карысна пры працы з радкамі, якія выкарыстоўваюць шмат зваротнай касой рысы, напрыклад, шляхі Windows і шаблоны рэгулярных выразаў.
Тут прадстаўлена наступная інфармацыя.

  • паслядоўнасць ўцёкаў
  • Ігнаруйце (адключайце) escape-паслядоўнасці ў сырых радках
  • Пераўтварыць звычайны радок у сырой радок:repr()
  • Звярніце ўвагу на зваротную касую рысу ў канцы.

паслядоўнасць ўцёкаў

У Python сімвалы, якія не могуць быць прадстаўлены ў звычайным радку (напрыклад, табуляцыя і новы радок), апісваюцца з дапамогай беглых паслядоўнасцяў з зваротнай касой рысай, падобна на мову C. Прыклад паслядоўнасці ўцёкаў паказаны ніжэй.

  • \t
  • \n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B

Ігнаруйце (адключайце) escape-паслядоўнасці ў сырых радках

...',"..."Калі да такога радкавага літаралу дадаць адно з наступных прэфіксаў, значэнне стане радком без пашырэння паслядоўнасці экранавання. Такая радок называецца сырой радком.

  • r
  • R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB

Не існуе спецыяльнага тыпу, які называецца сырым радковым тыпам, гэта проста тып радка і роўны звычайнаму радку з зваротнай касой рысай, прадстаўленай наступным чынам
\\

print(type(rs))
# <class 'str'>

print(rs == 'a\\tb\\nA\\tB')
# True

У звычайнай радку ўцяпляльная паслядоўнасць лічыцца адным сімвалам, але ў сырым радку зваротная косая рыса таксама лічыцца сімвалам. Даўжыня радка і кожнага сімвала наступная.

print(len(s))
# 7

print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']

print(len(rs))
# 10

print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']

Шлях Windows

Выкарыстанне сырой радкі карысна, калі вы хочаце прадставіць шлях Windows у выглядзе радка.

Шляхі Windows падзеленыя зваротнай касой рысай, таму, калі вы выкарыстоўваеце звычайны радок, вы павінны экранаваць шлях наступным чынам, але калі вы выкарыстоўваеце неапрацаваны радок, вы можаце запісаць яго як ёсць. Значэнні эквівалентныя.
\\

path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True

Звярніце ўвагу, што радок, які заканчваецца няцотнай колькасцю зваротнай касой рысы, прывядзе да памылкі, як апісана ніжэй. У гэтым выпадку неабходна напісаць радок як звычайную радок або аб’яднаць яго, запісаўшы толькі канец радка як звычайны радок.

path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True

Пераўтварыце звычайныя радкі ў неапрацаваныя радкі з дапамогай repr()

Калі вы хочаце пераўтварыць звычайную радок у неапрацаваны радок, ігнаруючы (адключаючы) escape-паслядоўнасці, вы можаце выкарыстоўваць убудаваную функцыю repr().

s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'

Тое, што вяртае repr(), гэта радок, які прадстаўляе такі аб’ект, які мае тое ж значэнне, што і пры перадачы eval(), з вядучымі і канчатковымі сімваламі.

print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]

Выкарыстоўваючы зрэзы, мы можам атрымаць радок, эквівалентны сырой радку з далучаным r.

s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB

print(s_r2 == rs)
# True

print(r'\t' == repr('\t')[1:-1])
# True

Звярніце ўвагу на зваротную касую рысу ў канцы.

Паколькі зваротная косая рыса пазбягае сімвала двукоссі адразу пасля яе, пры наяўнасці няцотнай колькасці зваротных слэш у канцы радка адбудзецца памылка. Цотная колькасць зваротных касых рысаў нармальна.

# print(r'\')
# SyntaxError: EOL while scanning string literal

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal