Li Pythonê bi xêzên xav guhnedana (neçalakkirina) rêzikên revê

Dikan

...',"..."Di Python de, heke hûn van tîpên rêzikan bi yek ji tîpên jêrîn veqetînin, dê nirx bêyî ku rêzika revê berfireh bike bibe rêz.

  • r
  • R

Kêrhatî ye dema ku bi rêzikên ku gelek paşvekêşan bikar tînin re mijûl dibin, wek rêyên Windows-ê û şêwazên vegotina birêkûpêk.
Agahiyên jêrîn li vir têne pêşkêş kirin.

  • rêza revê
  • Rêzên revê yên di rêzikên xav de paşguh nekin (neçalak bikin).
  • Rêza normal veguherînin rêzika xav:repr()
  • Di dawiya paşîn de balê bikişînin.

rêza revê

Di Python de, karakterên ku nikarin di rêzikek normal de bêne temsîl kirin (wek tablo û xetên nû) bi karanîna rêzikên revê yên bi paşkêşkêşan, mîna zimanê C, têne diyar kirin. Mînakek rêzek revê li jêr tê nîşandan.

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

Rêzên revê yên di rêzikên xav de paşguh nekin (neçalak bikin).

...',"..."Ger hûn rêzek weha bi yek ji yên jêrîn pêşgir bikin, dê nirx bêyî ku rêzika revê berfireh bike bibe rêz. Ji xêzeke wiha re têlê xav tê gotin.

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

Tîpek taybetî ya ku jê re tîpa rêza xav tê gotin tune, ew tenê celebek rêzek e û bi rêzika normal re wekhev e ku bi paşkêşkêşek wekî jêrîn tê xuyang kirin.
\\

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

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

Di rêzikek normal de, rêzek revînê wekî yek karakter tê hesibandin, lê di rêza xav de, paşpirtik jî wekî karakter têne hesibandin. Dirêjahiya têl û her karakter wiha ye.

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

Riya Windows

Dema ku hûn dixwazin rêyek Windows-ê wekî rêzek temsîl bikin, karanîna rêzika xav bikêr e.

Rêçên Windows-ê bi paşkêşan têne veqetandin, ji ber vê yekê heke hûn rêzek normal bikar bînin, divê hûn ji rêyê wekî jêrîn birevin, lê heke hûn rêzek xav bikar bînin, hûn dikarin wê wekî ku heye binivîsin. Nirxên wekhev in.
\\

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

Bala xwe bidinê ku rêzek ku bi jimareyek paşîn a paşîn diqede dê bibe sedema xeletiyekê, wekî ku li jêr hatî destnîşan kirin. Di vê rewşê de, pêdivî ye ku rêzik wekî rêzek normal were nivîsandin, an jî bi tenê dawiya rêzê wekî rêzek normal were nivîsandin.

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

Bi repr() rêzikên normal veguherînin rêzikên xav

Heke hûn dixwazin rêzek normal veguherînin xêzek xav ku rêzikên revînê paşguh dike (neçalak dike), hûn dikarin fonksiyona çêkirî ya repr() bikar bînin.

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

Tiştê ku repr() vedigerîne rêzek e ku hêmanek weha temsîl dike ku heman nirxa wê ya dema ku ji eval () re derbas bû, bi karakterên pêşeng û paşverû ve heye.

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

Bi karanîna perçeyan, em dikarin rêzek hevwateya xêza xav a ku bi r ve girêdayî ye bistînin.

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

Di dawiya paşîn de balê bikişînin.

Ji ber ku paşpirtikek yekser piştî wê ji karaktera binavkirî direve, heke li dawiya rêzikê çend jimarek paşpirtik hebin dê xeletiyek çêbibe. Hejmarek hevûdu ya paşkêşan baş e.

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

print(r'\\')
# \\

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