Ham dizelerle Python’da kaçış dizilerini yok sayma (devre dışı bırakma)

...',"..."Python’da, bu dize değişmezlerini aşağıdaki karakterlerden biriyle önek yaparsanız, değer, kaçış dizisini genişletmeden bir dize haline gelir.

  • r
  • R

Windows yolları ve düzenli ifade kalıpları gibi çok sayıda ters eğik çizgi kullanan dizelerle uğraşırken kullanışlıdır.
Aşağıdaki bilgiler burada verilmiştir.

  • kaçış dizisi
  • Ham dizelerdeki kaçış dizilerini yoksay (devre dışı bırak)
  • Normal dizeyi ham dizeye dönüştürün:repr()
  • Sondaki ters eğik çizgiye dikkat edin.

kaçış dizisi

Python’da, normal bir dizgede temsil edilemeyen karakterler (sekmeler ve yeni satırlar gibi), C diline benzer şekilde ters eğik çizgili kaçış dizileri kullanılarak tanımlanır. Aşağıda bir kaçış dizisi örneği gösterilmektedir.

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

Ham dizelerdeki kaçış dizilerini yoksay (devre dışı bırak)

...',"..."Böyle bir dize değişmezini aşağıdakilerden biriyle ön eklerseniz, değer, kaçış dizisini genişletmeden bir dize haline gelir. Böyle bir diziye ham dizi denir.

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

Ham dize türü olarak adlandırılan özel bir tür yoktur, yalnızca bir dize türüdür ve aşağıdaki gibi ters eğik çizgi ile temsil edilen normal bir dizeye eşittir.
\\

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

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

Normal bir dizede, bir kaçış dizisi bir karakter olarak kabul edilir, ancak ham bir dizede ters eğik çizgiler de karakter olarak sayılır. Dizenin uzunluğu ve her karakter aşağıdaki gibidir.

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 Yolu

Bir Windows yolunu bir dize olarak göstermek istediğinizde ham dizeyi kullanmak yararlıdır.

Windows yolları ters eğik çizgi ile ayrılmıştır, yani normal bir string kullanırsanız yoldan aşağıdaki gibi kaçmanız gerekir fakat eğer ham string kullanırsanız onu olduğu gibi yazabilirsiniz. Değerler eşdeğerdir.
\\

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

Tek sayıda ters eğik çizgi ile biten bir dizenin aşağıda açıklandığı gibi bir hatayla sonuçlanacağını unutmayın. Bu durumda dizeyi normal bir dize olarak yazmak veya dizenin sadece sonunu normal bir dize olarak yazarak birleştirmek gerekir.

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() ile normal dizeleri ham dizelere dönüştürün

Normal bir dizgiyi, kaçış dizilerini yok sayarak (devre dışı bırakarak) bir ham dizgeye dönüştürmek istiyorsanız, yerleşik repr() işlevini kullanabilirsiniz.

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

repr()’nin döndürdüğü şey, bir nesneyi temsil eden bir dizedir, öyle ki, başta ve sondaki karakterlerle eval()’e geçirildiği zamankiyle aynı değere sahiptir.

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

Dilimleri kullanarak, r eklenmiş ham dizeye eşdeğer bir dize elde edebiliriz.

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

Sondaki ters eğik çizgiye dikkat edin.

Ters eğik çizgi, hemen ardından gelen alıntı karakterinden kaçtığından, dizenin sonunda tek sayıda ters eğik çizgi varsa bir hata oluşur. Çift sayıda ters eğik çizgi sorun değil.

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

print(r'\\')
# \\

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