...'
،"..."
در پایتون، اگر این حرفهای رشتهای را با یکی از کاراکترهای زیر پیشوند کنید، مقدار بدون گسترش دنباله فرار به یک رشته تبدیل میشود.
r
R
هنگام برخورد با رشته هایی که از بک اسلش های زیادی استفاده می کنند، مانند مسیرهای ویندوز و الگوهای عبارت منظم، مفید است.
اطلاعات زیر در اینجا ارائه شده است.
- دنباله فرار
- توالی های فرار را در رشته های خام نادیده بگیرید (غیرفعال کنید).
- رشته معمولی را به رشته خام تبدیل کنید:
repr()
- به بک اسلش در انتها توجه کنید.
دنباله فرار
در پایتون، کاراکترهایی که نمیتوانند در یک رشته معمولی نمایش داده شوند (مانند زبانهها و خطوط جدید) با استفاده از دنبالههای فرار با اسلش برگشتی، مشابه زبان C توصیف میشوند. نمونه ای از توالی فرار در زیر نشان داده شده است.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
توالی های فرار را در رشته های خام نادیده بگیرید (غیرفعال کنید).
...'
،"..."
اگر پیشوند چنین رشته ای را با یکی از موارد زیر به معنای واقعی کلمه قرار دهید، مقدار بدون گسترش دنباله فرار به یک رشته تبدیل می شود. به چنین رشته ای رشته خام می گویند.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
نوع خاصی به نام نوع رشته خام وجود ندارد، فقط یک نوع رشته است و برابر با یک رشته معمولی است که یک بک اسلش به صورت زیر نمایش داده می شود.\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
در یک رشته معمولی، یک دنباله فرار یک کاراکتر در نظر گرفته می شود، اما در یک رشته خام، اسلش های برگشتی نیز به عنوان کاراکتر محاسبه می شوند. طول رشته و هر کاراکتر به صورت زیر است.
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']
مسیر ویندوز
استفاده از رشته خام زمانی مفید است که می خواهید یک مسیر ویندوز را به عنوان یک رشته نمایش دهید.
مسیرهای ویندوز با بک اسلش از هم جدا می شوند، بنابراین اگر از یک رشته معمولی استفاده می کنید، باید به صورت زیر از مسیر فرار کنید، اما اگر از یک رشته خام استفاده می کنید، می توانید آن را همانطور که هست بنویسید. مقادیر معادل هستند.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
توجه داشته باشید که رشته ای که به تعداد فرد بک اسلش ختم می شود، همانطور که در زیر توضیح داده شده است، با خطا مواجه می شود. در این صورت لازم است رشته را به صورت رشته معمولی بنویسیم یا با نوشتن فقط انتهای رشته به صورت رشته معمولی آن را به هم بچسبانیم.
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() رشته های معمولی را به رشته های خام تبدیل کنید
اگر میخواهید یک رشته معمولی را به یک رشته خام تبدیل کنید که توالیهای فرار را نادیده میگیرد (غیرفعال میکند)، میتوانید از تابع داخلی repr() استفاده کنید.
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
چیزی که repr() برمی گرداند رشته ای است که یک شی را نشان می دهد به طوری که دارای همان مقدار زمانی است که به eval()، با کاراکترهای اصلی و انتهایی ارسال می شود.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
با استفاده از برش ها، می توانیم رشته ای معادل رشته خام با 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
به بک اسلش در انتها توجه کنید.
از آنجایی که یک بک اسلش بلافاصله پس از آن از کاراکتر نقل قول خارج می شود، اگر تعداد فرد بک اسلش در انتهای رشته وجود داشته باشد، خطا رخ می دهد. تعداد زوج بک اسلش مشکلی ندارد.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal