'...'
, "..."
Pythonis, kui te kasutate nende string literaalide ees ühte järgmistest märkidest, muutub väärtus stringiks ilma põgenemisjada laiendamata.
r
R
Kasulik, kui tegemist on stringidega, mis kasutavad palju kaldkriipsu, näiteks Windowsi teekondades ja regulaaravaldiste mustrites.
Siin on esitatud järgmine teave.
- põgenemisjärjekord
- Ignoreerida (keelata) põgenemiskombinatsioone toorsõnades
- Tavalise stringi teisendamine toorstringiks:
repr()
- Pange tähele tagurpidi kaldkriipsu lõpus.
põgenemisjärjekord
Pythonis kirjeldatakse sümboleid, mida ei saa esitada tavalises stringis (näiteks tabulaatorid ja read), kasutades sarnaselt C-keelele tagurpidi joonealuseid põgenemiskombinatsioone. Allpool on näidatud näide põgenemisjärjekorra kohta.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
Ignoreerida (keelata) põgenemiskombinatsioone toorsõnades
'...'
, "..."
Kui lisate sellisele string literaalile ühe järgmistest, muutub väärtus stringiks ilma põgenemisjada laiendamata. Sellist stringi nimetatakse töötlemata stringiks.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
Ei ole olemas spetsiaalset tüüpi nimega raw string type, see on lihtsalt string type ja on võrdne tavalise stringiga koos backslash'iga, mis on esitatud järgmiselt\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
Tavalises stringis loetakse põgenemiskombinatsiooni üheks märgiks, kuid toorstringis loetakse ka kaldkriipsud märgiks. Stringi ja iga tähemärgi pikkus on järgmine.
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']
Windowsi tee
Toore stringi kasutamine on kasulik, kui soovite esitada Windowsi tee stringina.
Windowsi teed on eraldatud kaldkriipsudega, nii et kui kasutate tavalist stringi, peate te põgenema tee järgmiselt, kuid kui kasutate toorest stringi, võite selle kirjutada sellisena, nagu see on. Väärtused on samaväärsed.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
Pange tähele, et string, mis lõpeb paaritu arvu kaldkriipsudega, põhjustab vea, nagu on kirjeldatud allpool. Sellisel juhul tuleb string kirjutada tavalise stringina või liita see, kirjutades ainult stringi lõppu tavalise stringina.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
Tavaliste stringide teisendamine töötlemata stringideks repr() abil
Kui soovite teisendada tavalise stringi tooreks stringiks, ignoreerides (keelates) põgenemiskombinatsioone, võite kasutada sisseehitatud funktsiooni repr().
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
repr() tagastab objekti kujutava stringi, mis on sama väärtusega kui see, mis edastati eval()-ile, koos ees- ja tagantjärele jäävate märkidega.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
Kasutades viilud, saame stringi, mis on samaväärne toorstringiga, millele on lisatud 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
Pange tähele tagurpidi kaldkriipsu lõpus.
Kuna tagurpidi joonealune kaldkriips katkestab vahetult sellele järgneva jutumärgi, tekib viga, kui stringi lõpus on paaritu arv tagurpidi kaldkriime. Paaris arv kaldkriipsusid on OK.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal