...'
,"..."
পাইথনে, আপনি যদি এই স্ট্রিং লিটারেলগুলিকে নিম্নলিখিত অক্ষরগুলির মধ্যে একটি দিয়ে প্রিফিক্স করেন, তাহলে মানটি এস্কেপ সিকোয়েন্স প্রসারিত না করেই একটি স্ট্রিং হয়ে যাবে।
r
R
অনেকগুলি ব্যাকস্ল্যাশ ব্যবহার করে এমন স্ট্রিংগুলির সাথে ডিল করার সময় দরকারী, যেমন Windows পাথ এবং রেগুলার এক্সপ্রেশন প্যাটার্ন৷
নিম্নলিখিত তথ্য এখানে প্রদান করা হয়.
- পালানোর ক্রম
- কাঁচা স্ট্রিংগুলিতে এস্কেপ সিকোয়েন্সগুলি উপেক্ষা করুন (অক্ষম করুন)
- সাধারণ স্ট্রিংকে কাঁচা স্ট্রিংয়ে রূপান্তর করুন:
repr()
- শেষে ব্যাকস্ল্যাশ নোট করুন।
পালানোর ক্রম
পাইথনে, যে অক্ষরগুলিকে সাধারণ স্ট্রিং-এ উপস্থাপন করা যায় না (যেমন ট্যাব এবং নিউলাইন) সেগুলি সি ভাষার মতো ব্যাকস্ল্যাশ সহ এস্কেপ সিকোয়েন্স ব্যবহার করে বর্ণনা করা হয়। একটি অব্যাহতি ক্রম একটি উদাহরণ নীচে দেখানো হয়েছে.
\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