Ignoriranje (onemogočanje) zaporedij escape v Pythonu z neobdelanimi nizi

Posel

'...', "..."Če v Pythonu tem literalnim nizom dodamo enega od naslednjih znakov, bo vrednost postala niz, ne da bi razširili zaporedje escape.

  • r
  • R

Uporabno pri delu z nizi, ki uporabljajo veliko povratnih črtic, kot so poti v sistemu Windows in vzorci regularnih izrazov.
Tu so na voljo naslednje informacije.

  • zaporedje pobega
  • Ignoriranje (onemogočanje) zaporedij escape v neobdelanih nizih
  • Pretvarjanje normalnega niza v neobdelan niz:repr()
  • Upoštevajte povratno poševnico na koncu.

zaporedje pobega

V Pythonu se znaki, ki jih ni mogoče predstaviti v običajnem nizu (kot so tabulatorji in nove vrstice), opišejo z zaporedji pobega s povratnimi lomkami, podobno kot v jeziku C. Primer zaporedja escape je prikazan spodaj.

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

Ignoriranje (onemogočanje) zaporedij escape v neobdelanih nizih

'...', "..."Če pred takšnim literalom niza postavite eno od naslednjih predpon, bo vrednost postala niz, ne da bi razširili zaporedje escape. Takšen niz se imenuje neobdelan niz.

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

Ne obstaja poseben tip, imenovan tip surovega niza, je samo tip niza in je enak običajnemu nizu s povratno poševnico, ki je predstavljen na naslednji način
\\

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

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

V običajnem nizu se zaporedje escape šteje za en znak, v neobdelanem nizu pa se kot znaki štejejo tudi povratne lomke. Dolžina niza in vsakega znaka je naslednja.

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']

Pot sistema Windows

Uporaba surovega niza je uporabna, kadar želite pot v sistemu Windows predstaviti kot niz.

Poti v sistemu Windows so ločene s povratnimi lomkami, zato morate pri uporabi običajnega niza pot pobegniti, kot sledi, če pa uporabite neobdelan niz, ga lahko zapišete tako, kot je. Vrednosti so enakovredne.
\\

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

Upoštevajte, da bo niz, ki se konča z lihim številom povratnih lomk, povzročil napako, kot je opisano spodaj. V tem primeru je treba niz zapisati kot običajen niz ali ga združiti tako, da kot običajen niz zapišete samo konec niza.

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

Pretvarjanje običajnih nizov v neobdelane nize s funkcijo repr()

Če želite običajen niz pretvoriti v neobdelan niz in pri tem zanemariti (onemogočiti) zaporedja escape, lahko uporabite vgrajeno funkcijo repr().

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

Funkcija repr() vrne niz, ki predstavlja predmet in ima enako vrednost, kot jo je imel, ko je bil posredovan funkciji eval(), z začetnimi in zaključnimi znaki.

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

Z uporabo rezin lahko dobimo niz, ki je enakovreden neobdelanemu nizu s priloženim 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

Upoštevajte povratno poševnico na koncu.

Ker povratna poševnica pobegne znaku citiranja, ki je takoj za njo, se pojavi napaka, če je na koncu niza neparno število povratnih poševnic. Če je število povratnih lomk sodo, je to v redu.

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

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal
Copied title and URL