Ignoriranje (onemogućavanje) izlaznih sekvenci u Pythonu s sirovim nizovima

Poslovanje

...',"..."U Pythonu, ako ovim literalima stringa dodate jedan od sljedećih znakova, vrijednost će postati niz bez proširenja escape sekvence.

  • r
  • R

Korisno kada radite sa nizovima koji koriste puno obrnutih kosih crta, kao što su Windows staze i obrasci regularnog izraza.
Ovdje su navedene sljedeće informacije.

  • bijeg slijeda
  • Zanemari (onemogući) izlazne sekvence u sirovim nizovima
  • Pretvorite normalni niz u neobrađeni niz:repr()
  • Obratite pažnju na obrnutu kosu crtu na kraju.

bijeg slijeda

U Pythonu se znakovi koji se ne mogu predstaviti u normalnom nizu (kao što su tabulatori i novi redovi) opisuju korištenjem izlaznih sekvenci s obrnutim crtama, slično kao u jeziku C. Primjer escape sekvence prikazan je u nastavku.

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

Zanemari (onemogući) izlazne sekvence u sirovim nizovima

...',"..."Ako takvom literalu stringa dodate jedan od sljedećih prefiksa, vrijednost će postati niz bez proširenja izlaznog niza. Takav niz naziva se sirovi niz.

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

Ne postoji posebna vrsta koja se zove sirova vrsta stringa, to je samo vrsta niza i jednaka je normalnom nizu s obrnutom kosom crtom predstavljenom na sljedeći način
\\

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

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

U normalnom nizu, izlazni slijed se smatra jednim znakom, ali u sirovom nizu, obrnute kose crte također se broje kao znakovi. Duljina niza i svakog znaka je kako slijedi.

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 put

Korištenje sirovog niza korisno je kada želite predstaviti Windows stazu kao niz.

Windows staze su odvojene obrnutim crtama, pa ako koristite normalni niz, morate pobjeći od puta na sljedeći način, ali ako koristite neobrađeni niz, možete ga napisati kakav jest. Vrijednosti su ekvivalentne.
\\

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

Imajte na umu da će niz koji završava neparnim brojem obrnutih kosih crta rezultirati pogreškom, kao što je opisano u nastavku. U ovom slučaju, potrebno je string napisati kao normalan niz, ili ga spojiti tako što ćete napisati samo kraj niza kao normalan niz.

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

Pretvorite normalne nizove u neobrađene nizove pomoću repr()

Ako želite pretvoriti normalni niz u neobrađeni niz zanemarujući (onemogućujući) izlazne sekvence, možete koristiti ugrađenu funkciju repr().

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

Ono što repr() vraća je niz koji predstavlja objekt takav da ima istu vrijednost kao kada je proslijeđen eval(), s vodećim i završnim znakovima.

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

Koristeći rezove, možemo dobiti niz ekvivalentan sirovom 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

Obratite pažnju na obrnutu kosu crtu na kraju.

Budući da obrnuta kosa crta bježi od znaka za navodnike odmah nakon nje, doći će do pogreške ako na kraju niza postoji neparan broj obrnutih kosih crta. Parni broj obrnutih kosih crta je u redu.

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

print(r'\\')
# \\

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