Игнориране (деактивиране) на escape последователности в Python с необработени низове

Бизнес

'...', "..."В Python, ако поставите префикс на тези символни низове с един от следните символи, стойността ще се превърне в низ, без да се разширява ескейп последователността.

  • r
  • R

Полезно е, когато се работи с низове, които използват много обратни наклонени черти, като например пътища на Windows и шаблони на регулярни изрази.
Тук се предоставя следната информация.

  • последователност на извеждане
  • Игнориране (деактивиране) на escape последователности в необработени низове
  • Конвертиране на нормален низ в необработен низ:repr()
  • Обърнете внимание на обратната наклонена черта в края.

последователност на извеждане

В Python символите, които не могат да бъдат представени в нормален низ (като табулации и нови редове), се описват с помощта на escape последователности с обратни наклонени черти, подобно на езика 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

Няма специален тип, наречен raw string type, той е просто тип низ и е равен на нормален низ с обратна наклонена черта, представен по следния начин
\\

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