في بايثون، يتم تمثيل البيانات النصية بنوع البيانات السلسلة. إنه أحد أنواع البيانات الأساسية المضمنة، لذا فإن معرفة كيفية العمل مع السلاسل في بايثون بكفاءة أمر أساسي لتصبح مبرمجًا جيدًا. في هذه المقالة، سنعرض لك أساسيات سلسلة بايثون مع الكثير من الأمثلة العملية.
تحتوي لغة بايثون على العديد من أنواع البيانات المضمنة. وتشمل بعض هذه الأنواع الأعداد الصحيحة (مثل 3، -7)، أو الأعداد ذات الفاصلة العائمة (مثل 1.23، -8.0132)، أو حتى الأعداد المركبة (مثل 2 + 3j). أحد أهم أنواع البيانات في بايثون هو السلسلة، والتي تُستخدم لتمثيل بيانات النص. وإتقان أساسيات العمل مع سلاسل بايثون هو خطوة حاسمة لأي شخص يريد تعلم بايثون بسرعة.
في هذه المقالة، سنستكشف أساسيات سلسلة بايثون ونضع أساسًا قويًا للمبتدئين لبناء معارفهم ومهاراتهم.
تعريف سلسلة بايثون
توجد طرق مختلفة لتعريف السلاسل في بايثون – وهي علامات الاقتباس المفردة (‘) وعلامات الاقتباس المزدوجة (“) وعلامات الاقتباس الثلاثية (”’ أو “””). تتيح لك هذه المرونة تعريف السلاسل في العديد من السياقات المختلفة. فكر في الأمثلة أدناه. ما عليك سوى فتح مُفسِّر بايثون أو بيئة التطوير المتكاملة المفضلة لديك وتنفيذ ما يلي:
sentence = 'Here is a sentence.'
sentence = "I'm also a sentence which contains a single quote."
sentence = """This is a long sentence that goes over three
lines so it's easier to read. This is useful for writing
docstrings for your functions"""
إذا قمت بفحص متغير الجملة من المثال الأخير، فستلاحظ أنه تم إدراج حرف سطر جديد (‘\n
‘) تلقائيًا بين ‘three’ و’lines’، و’writing’ و’docstring’. وهذا يضمن طباعته بشكل جيد عند استخدام عبارة print()
.
السلاسل في بايثون غير قابلة للتغيير، مما يعني أنه بمجرد إنشاء سلسلة، فإنها تحتفظ بمحتواها الأصلي ولا يمكن تغييرها. لإثبات ذلك، حاول إنشاء سلسلة وتغيير الحرف الأول من أحرف كبيرة إلى أحرف صغيرة مثل هذا:
sentence = 'Here is a string with words'
sentence[0] = 'h'
يؤدي هذا إلى ظهور خطأ TypeError
. يأتي هذا الثبات مع بعض المزايا. فهو يضمن الحفاظ على السلسلة الأصلية، مما يجعل معالجة السلاسل أكثر أمانًا. كما أنه أكثر كفاءة في استخدام الذاكرة ويعني أنه يمكن تحسين العمليات الأخرى عند العمل مع السلاسل. ولكن عندما تريد تعديل سلسلة، فسيتعين عليك إنشاء نسخة معدلة.
sentence = 'Here are many words, some grammar, and 1 number!'
print(sentence[0])
H
print(sentence[12])
y
print(sentence[-1])
!
من خلال تحديد الفهرس بين قوسين مربعين، يمكنك الوصول إلى أي عنصر من السلسلة. تذكر أنه في بايثون، تبدأ الفهرسة من الصفر. كما يمكنك الفهرسة من نهاية السلسلة من خلال تحديد فهرس سلبي يبدأ من -1. أخيرًا، لاحظ أن المسافات والفواصل وعلامة التعجب مضمنة كعناصر سلسلة. جميع العناصر لها نوع بيانات str
، حتى الرقم 1.
للحصول على سلسلة فرعية من السلسلة الأصلية، يمكنك استخدام التقطيع والتقسيم. وإليك كيفية الحصول على أول 10 عناصر وأخر 10 عناصر من السلسلة:
sentence[:10]
'Here are m'
sentence[-10:]
' 1 number!'
أحد الأخطاء الشائعة عند العمل مع السلاسل بهذه الطريقة هو خطأ IndexError
، والذي يحدث غالبًا عند محاولة الوصول إلى فهرس غير موجود. على سبيل المثال:
print(sentence[50])
للتعامل مع هذا الخطأ، ما عليك سوى التحقق من طول السلسلة والتأكد من أن الفهرس ضمن الحدود. نظرًا لأن بايثون يستخدم الفهرسة القائمة على الصفر، فإن آخر حرف يكون عند الفهرس len(string) - 1
:
final_index = len(sentence)
print(sentence[final_index - 1])
'!'
هناك طريقة مفيدة أخرى للحصول على سلسلة فرعية من السلسلة الأصلية في بايثون وهي استخدام التابع string.split()
. بشكل افتراضي، تقوم هذه الطريقة بتقسيم السلاسل عند المسافات، ولكن يمكنك أيضًا تقسيمها عند أي عنصر سلسلة آخر. ألق نظرة على هذه الأمثلة:
sentence.split()
['Here', 'are', 'many', 'words,', 'some', 'grammar,', 'and', '1', 'number!']
sentence.split('a')
['Here ', 're m', 'ny words, some gr', 'mm', 'r, ', 'nd 1 number!']
لاحظ أن القيمة المستخدمة لتقسيم الجملة تمت إزالتها أيضًا من القائمة.
عمليات السلسلة في بايثون
توفر لغة بايثون مجموعة متنوعة من التوابع للتعامل مع السلاسل بشكل فعال. لقد رأينا بعض الأمثلة في القسم الأخير حول مدى فائدة التابع split()
. مثال آخر هو الإضافة إلى سلسلة. في هذا القسم، سنستكشف بعض عمليات السلاسل الشائعة الأخرى (مثل التجميع) وبعض التوابع المضمنة لمساعدتك في التعامل مع السلاسل.
تتضمن عملية التجميع دمج سلسلتين أو أكثر في سلسلة جديدة واحدة. ويمكن تحقيق ذلك بسهولة باستخدام عامل الجمع (+):
str1 = "Hello"
str2 = "World"
result = str1 + ", " + str2
print(result)
Hello, World
يمكن تحقيق نفس النتيجة من خلال الاستفادة من التابع join()
المضمنة في Python:
', '.join([str1, str2])
'Hello, World'
يجب أن يكون “joiner” عبارة عن سلسلة، والتي في هذه الحالة هي ', '
. يمكن أن تكون الوسيطة لتابع join()
أي كائن قابل للتكرار (على سبيل المثال، مجموعة أو قائمة) يحتوي على السلاسل المراد ضمها.
يمكن استخدام upper()
و lower()
لتحويل كافة العناصر في سلسلة إلى أحرف كبيرة أو أحرف صغيرة، على التوالي:
text = 'Python String Manipulation is Simple'
print(text.upper())
'PYTHON STRING MANIPULATION IS SIMPLE'
print(text.lower())
'python string manipulation is simple'
لا تقوم هذه التوابع بإجراء التلاعب في المكان. بدلاً من ذلك، سيتعين عليك حفظ الإصدار بأحرف كبيرة/صغيرة كمتغير جديد إذا كنت تريد إعادة استخدامه.
يمكن استخدام التابع find()
لتحديد موضع سلسلة فرعية من سلسلة. الوسيطة المطلوبة هي السلسلة الفرعية التي تريد تحديد موقعها، ويأخذ التابع وسيطتين اختياريتين: مؤشر البداية ومؤشر التوقف. باستخدام متغير النص المحدد أعلاه، يبدو الاستخدام الأساسي لهذه التابع كما يلي:
text = 'Python String Manipulation is Simple'
text.find('String')
7
القيمة التي تم إرجاعها هي الفهرس الأول حيث تم العثور على السلسلة الفرعية. هناك تابع ذات صلة، rfind()
، يعيد آخر موضع حيث توجد السلسلة الفرعية. إذا لم يتم العثور على السلسلة الفرعية، فإن كلتا التابعين يعيدان -1.
كنوع من التدريب، حاول استخدام التابع find()
لتحديد الموقع الثاني لـ “i” في متغير النص – في هذه الحالة، ستحتاج إلى استخدام الوسائط الاختيارية.
هناك تابع أخر مرتبط بالسلسلة وهو index()
، وهو تقريبًا نفس التابع find()
. ومع ذلك، إذا لم يعثر التابع index()
على القيمة، يتم رفع ValueError
.
التابع الأخير الدي سنناقشه هو replace()
. يستخدم هذا التابع لاستبدال سلسلة فرعية محددة بسلسلة فرعية مختلفة. السلسلة الفرعية المستهدفة هي الوسيطة الأولى والسلسلة الفرعية التي ستحل محل السلسلة المستهدفة هي الوسيطة الثانية:
original_str = 'I like programming in Java. '
new_str = original_str.replace('Java', 'Python')
print(new_str)
I like programming in Python.
هذه مجرد عينة صغيرة من بعض توابع السلسلة المتاحة لمساعدتك في معالجة بيانات النص. للحصول على قائمة شاملة مع شرح للحجج، راجع وثائق Python الرسمية.
تنسيق السلاسل في بايثون
يعد تنسيق السلسلة جانبًا بالغ الأهمية في البرمجة، وخاصة بالنسبة لمحللي البيانات الذين يعملون باستخدام Python. فهو يسمح لك بتقديم البيانات بطريقة منظمة وقابلة للقراءة، مما يسهل فهمها وتفسيرها. في Python، توجد عدة طرق لتنسيق السلسلة، ولكل منها نقاط قوتها وحالات استخدامها الخاصة.
أحد الطرق القديمة لتنسيق السلسلة في بايثون هو استخدام عامل %. تتضمن هذه الطريقة تحديد مواصفات التنسيق داخل السلسلة ثم توفير القيم التي سيتم استبدالها. على سبيل المثال:
name = "Alice"
age = 25
formatted_string = "Name: %s, Age: %d" % (name, age)
print(formatted_string)
Name: Alice, Age: 25
في هذا المثال، %s هو عنصر نائب لسلسلة، و%d هو عنصر نائب لعدد صحيح. ورغم أن هذه الطريقة لا تزال صالحة، إلا أنها تعتبر قديمة إلى حد ما وقد حلت محلها إلى حد كبير أساليب أكثر حداثة.
يوفر التابع str.format()
طريقة أكثر مرونة وقابلية للقراءة لتنسيق السلاسل. فهو يستخدم الأقواس المتعرجة {} كعلامات مكانية ويسمح باستخدام وسيطات موضعية ووسيطة كلمات رئيسية. فيما يلي مثال:
name = "Bob"
age = 30
formatted_string = "Name: {}, Age: {}".format(name, age)
print(formatted_string)
Name: Bob, Age: 30
في هذه الحالة، يعمل {}
كعلامة مكانية للقيم المقدمة في التابع format()
. يمكنك أيضًا استخدام وسيطات موضعية أو كلمات رئيسية لمزيد من التحكم في الاستبدال.
تتميز الإصدارات الأحدث من Python بـ f-strings كطريقة موجزة ومعبرة لتنسيق السلسلة. فهي تدمج التعبيرات داخل أحرف السلسلة، مما يجعل الكود أكثر قابلية للقراءة ويقلل الحاجة إلى عناصر نائبة صريحة. إليك مثال:
name = "Hana"
age = 22
formatted_string = f"Name: {name}, Age: {age}"
print(formatted_string)
Name: Hana, Age: 22
في f-string، يتم تقييم التعبيرات الموجودة داخل الأقواس المتعرجة أثناء وقت التشغيل، ويتم إدراج نتائجها في السلسلة. وهذا يجعل f-string ليس موجزة فحسب، بل فعالة أيضًا.
عند العمل بتنسيق السلسلة في Python، يعتمد اختيار الطريقة الصحيحة على تفضيلاتك وإصدار Python الذي تستخدمه. في حين أن عامل %
و str.format()
لا يزالان صالحين ومستخدمين على نطاق واسع، فإن f-strings تعتبر الطريقة الأكثر حداثة وقابلية للقراءة.
فهم ترميز وفك تشفير السلسلة في بايثون
عند العمل مع السلاسل في بايثون، من المهم فهم ترميز السلاسل وفك ترميزها. تصبح هذه المعرفة ذات صلة عند التعامل مع عمليات الإدخال/الإخراج، ومعالجة الملفات، والاتصال بين الأنظمة المختلفة.
ترميز الأحرف هو عملية تحويل الأحرف إلى تمثيل ثنائي. تمثل ترميزات الأحرف المختلفة مثل ASCII وUTF-8 وUTF-16 الأحرف بطرق فريدة. عند كتابة أو قراءة البيانات إلى أو من الملفات، من المهم مراعاة الترميز المستخدم.
UTF-8 (تنسيق تحويل Unicode 8 بت) هو أحد أكثر ترميزات الأحرف استخدامًا. وهو متوافق مع ASCII ويمكنه تمثيل كل حرف في مجموعة أحرف Unicode.
كيفية ترميز وفك تشفير سلاسل بايثون
ترميز سلسلة في بايثون يعني تحويلها من تمثيل Unicode إلى ترميز أحرف معين. يستخدم التابع encode()
لهذا الغرض. فيما يلي مثال:
text = "Hello, World!"
encoded_text = text.encode("UTF-8")
print(encoded_text)
b'Hello, World!'
في هذا المثال، يتم تطبيق التابع encode()
على نص السلسلة باستخدام ترميز UTF-8. النص المشفر الناتج هو كائن بايت يحتوي على التمثيل الثنائي للسلسلة.
فك التشفير هو العملية العكسية – تحويل التمثيل الثنائي إلى سلسلة مشفرة بشكل مختلف. فيما يلي مثال لكيفية استخدام التابع decode()
لهذا الغرض:
binary_data = b'Hello, World!'
decoded_text = binary_data.decode("UTF-8")
print(decoded_text)
Hello, World!
ترميز السلسلة في عمليات الإدخال/الإخراج
إن فهم ترميز الأحرف ضروري لعمليات الإدخال والإخراج، مثل القراءة من الملفات أو الكتابة إليها. عند فتح ملف، يمكنك تحديد الترميز المطلوب لضمان التفسير الصحيح للبيانات. على سبيل المثال:
with open("example.txt", "r", encoding="UTF-8") as file:
content = file.read()
# Perform operations on the content
في هذه الحالة، تضمن معلمة الترميز قراءة الملف باستخدام ترميز UTF-8. إن الوعي بترميزات الأحرف يسمح لك بالتعامل مع السلاسل بطريقة تضمن التمثيل الدقيق والتواصل السلس بين الأنظمة المختلفة.
قد تحدث مشكلات عند التعامل مع الترميز وفك التشفير إذا لم يتطابق الترميز المحدد مع الترميز الفعلي للبيانات. تحقق دائمًا من ترميز مصدر البيانات لديك وتعامل مع أخطاء الترميز المحتملة ببراعة. باستخدام معلمة الأخطاء في decode()
، يمكنك التعامل مع المشكلات بطرق متنوعة. على سبيل المثال، يمكنك إما تجاهل الأخطاء أو استبدال البيانات المشوهة.
إتقان التعامل مع سلاسل بايثون
إن التعامل مع السلاسل في بايثون مهارة أساسية لأي مبرمج، وإتقانها يتطلب التعلم والتجريب المستمر. هناك العديد من الطرق لممارسة البرمجة. استكشف وثائق بايثون والبرامج التعليمية عبر الإنترنت والمنتديات المجتمعية للحصول على رؤى حول أفضل الممارسات والتقنيات الفعّالة. تذكر أن مجتمع بايثون غني بالموارد.
قد يكون تعلم لغة بايثون بمثابة خطوة أولى نحو مهنة جديدة. فحتى في عصر التقدم السريع في مجال الذكاء الاصطناعي، سيظل الطلب على مطوري لغة بايثون مرتفعًا – وخاصة أولئك الذين يتمتعون بمهارات متعددة مثل SQL.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.