معالجة البيانات النصية String مع Python
يعتبر نوع البيانات النصية String من بين الأنواع الأكثر شيوعًا في Python. وتعدد طُرق معالجة البيانات النصية String في بايثون… فكيف يتم التعامل مع String من خلال تعليمات Python … ؟؟!!
تعرفنا فى مقالات سابقة على أنواع البيانات في Python وفي مقال أنواع البيانات في Python ذكرنا لمحة موجزة عن نوع البيانات النصية string اولتعامل معها وفي هذا المقال سنتناول طريقة معالجة لبيانات النصية String في بايثون بالتفصيل لنبدأ…
البيانات النصية String في Python
تصنف البيانات النصية String أو سلال الحروف ضمن مجموعات البيانات المتسلسلة و تعتبر في Python في معظم لغات البرمجة كا Object للـ Data Structure و تتمثل في Python بـ str class . وتوفر Python العديد من الدوال والمعاملات للعمل معها. في هذا المقال سنستعرض طرق التعامل مع String في Python فسوف نشرح التالي:
- إنشاء String في Python.
- استخدام المعاملات مع String.
- دوال String في Python.
- String Formatting.
- التشفير Encoding وفك التشفير Decoding للبيانات النصية String.
إنشاء String في Python
يُعد إنشاء string في بايثون أمرًا بسيطًا مثل تخصيص قيمة لمتغير. وهذه القيمة ببساطة هي تضمين سلسلة من الأحرف بين علامتي اقتباس Qutations ('...') , ولا فرق في Python بين علامات الاقتباس المفردة مثل علامات الاقتباس المزدوجة Double qutations ("..."). لنأخذ مثال :
...........
str1 = "Welcome to Python"
str2 = 'Welcome to Python'
print (str1)
print(str2)
...........
ذكرنا أن القيم للـ String يتم إنشاؤها باستخدام علامات الاقتباس ، سواء علامات الاقتباس المفردة أو المزدوجة ولكن بشرط استخدام نفس الشيء في كلا الطرفين. بالإضافة إلى ذلك ، يمكننا استخدام سلسلة نصية ثلاثية - هذا هو Python-talk للـ string تبدأ وتنتهي بثلاثة أحرف اقتباس (إما ثلاثة علامات اقتباس مفردة أو ثلاث علامات اقتباس مزدوجة). وهنا تكون الجملة النصية طويلة على سبيل المثال:
...........
str1 = '''Welcom to
Python'''
str1 = """Welcom to
Python"""
print(str1)
...........
كما يمكن إنشاء String باستخدام دالة لإنشاء str() بدون اي قيم تقوم بإرجاع string فارغة ، و باستخدام قيم ، فإنها تُرجع قيمة نصية لهذه القيم. أيضًا استخدام دالة str () كدالة تحويل ، وفي هذه الحالة يجب أن تكون القيمة الأولى عبارة عن string أو شيء قابل للتحويل إلى string ، مع تمرير ما يصل إلى قيمتين اختياريتين ، أحدهما يحدد التشفير المطلوب استخدامه والآخر تحديد كيفية معالجة اخطاء التشفير. لنأخذ مثال :
...........
str1 = str(['Wlecom','to', 'Python', 3])
str2 = str(('Wlecom','to', 'Python', 3))
str3 = str(True)
str4 = str(1)
str5 = str(2.5)
...........
استخدام المعاملات مع String
كما ذكرنا في مقال أنواع البيانات في بايثون مع string يمكن استخدام المعامل (+) لدمج string مع بعضها البعض و المعامل (*) لتكرار string عدد من المرات كما في المثال التالي :
...........
str1 = 'Welcome to '
str2 = 'Python'
print( str1 + str2)
print ( str2 * 3)
...........
وبما أن String تعتبر من البيانات التسلسلية فيمكن استخدام الفهرسة indexing لوصول الى عناصر الـ string فيكمن استرجاع قيمة لعنصر محدد أو إرجاع نطاق من الأحرف .عن طريق تحديد بداية ونهاية النطاق ، مفصولين بنقطتين ، لإرجاع جزء من String. كما في المثال التالي :
...........
str1 = 'Welcome to Python'
print (str1[1])
print(str1[11:17])
print(str1[11:])
print(str1[:-9])
...........
يمكن كذلك استخدام in أو not in للتحقق من وجود عنصر معين في string كما يتضح فيما يلي :
...........
str1 = 'Welcome to Python'
print('P' in str1)
print ('P' not in str1)
...........
وواحدة من أروع ميزات Python هي عامل تنسيق string (%) يعتبر هذا العامل بالنسبة إلى string ويعوض عن حزمة الوظائف التي تنتمي إلى عائلة printf ( ) في لغة C. وتتضح بعض استخداماته في الشكل التالي :
وفيما يلي أمثلة على هذه على استخدام هذه المعاملات مع البيانات النصية String:
...........
print(" Welcome to %cython"%('P'))
print(" Welcome to %s %i"%('Python', 3))
print(" Welcome to %s %d"%('Python', 3))
a = 12
print(" 12 in Octal is = %o"%(a))
print(" 12 in hexadecimal is = %x or %X"%(a, a))
print(" %f"%(a))
...........
الـ Output للمثال:
Welcome to Python Welcome to Python 3 Welcome to Python 3 12 in Octal is = 14 12 in hexadecimal is = c or C 12.000000
مع البيانات النصية String توفر Python ايضاً أحرف غير قابلة للطباعة وتسمى بأحرف الهروب Escape Characters حيث تستخدم أحرف الهروب مع النصوص لتنفيذ وظيفة معينة قد تكون تنسيق للنص مثل البدء في سطر جديد أو طباعة رموز معينة مثل طباعة علامات الاقتباس داخل النص والشكل التالي يوضح أشهر أحرف الهروب المستخدمة في Python ووظيفة كلاً منها:
وهنا مثال يوضح طريقة استخدام أحرف الهروب Escape Characters مع البيانات النصية String :
...........
str1 = 'Welcome \t to \n \"Python\"'
print(str1)
...........
الـ Output للمثال:
Welcome to "Python"
ولإلغاء المعنى الفعلي لأحرف الهروب نستخدم Raw String- (R/r). في بناء الجملة النصية string الأولية هو نفسه تمامًا مثل string العادية باستثناء عامل تشغيل السلسلة الأولية ، الحرف "r" ، الذي يسبق علامات الاقتباس. يمكن أن تكون "r" صغيرة (r) أو كبيرة (R) ويجب وضعها مباشرة قبل علامة الاقتباس الأولى. كما يتضح في المثال التالي :
...........
print( r'\\ Welcome to Python')
print( R"\\ Welcome to Python")
...........
الـ Output للمثال:
\\ Welcome to Python \\ Welcome to Python
دوال String في Python
تعدد الدوال المستخدمة مع String في بايثون بين دوال تحقق وبحث وتغيير للـ string تطرقنا البعض منها في مقال Data Types في Python وهنا سنناقشها بشئ من التفصيل لنبدأ بتصنيف هذه الداول المجموعات حسب ووظائفها كتالي:
- دوال تعمل على تعديل حالة الأحرف في string.
- دوال تعمل على ضبط المحاذاة والمسافات البادئة.
- دوال البحث مع String.
- جمع وتقسيم الـ String.
- دوال التحقق مع String.
- بعض الدوال التي تعمل مع String.
دوال تعمل على تعديل حالة الأحرف في string
توفر Python مجموعة دوال تجري تعديل على الأحرف في String بنا على حالتها الأصلية ومنها يتضح في الشكل التالي:
وهنا أمثلة توضح طريقة استخدامها مع string:
...........
str1 = "Welcome to Python"
print(str1.upper())
print(str1.lower())
print(str1.casefold())
print(str1.capitalize())
print(str1.title())
print(str1.swapcase())
...........
الـ Output للمثال:
WELCOME TO PYTHON welcome to python welcome to python Welcome to python Welcome To Python wELCOME TO pYTHON
دوال تعمل على ضبط المحاذاة والمسافات البادئة
مع Python يمكن ضبط المحاذاة والمسافات البادئة للـ string مع عدد من الدوال تتضح في الشكل التالي :
وهنا أمثلة على طريقة استخدام دوال صبط المحاذاة والمسافات لبادءة للـ String من خلال تعليميات Python:
الدالة expandtabs()
...........
str1 = "P\ty\tt\th\to\tn"
print(str1.expandtabs())
print(str1.expandtabs(3))
print(str1.expandtabs(6))
print(str1.expandtabs(12))
...........
الـ Output للمثال:
P y t h o n P y t h o n P y t h o n P y t h o n
الدوال ljust()و rjust()
...........
str1 = "Welcome to Python"
print(str1.ljust(30) , " 3")
print(str1.ljust(30, "*") , " 3")
print(str1.rjust(30) , " 3")
print(str1.rjust(30, "*") , " 3")
...........
الـ Output للمثال:
Welcome to Python 3 Welcome to Python************* 3 Welcome to Python 3 *************Welcome to Python 3
الدالة center()
...........
str1 = "Welcome to Python"
print(str1.center(30))
print(str1.center(30, '*'))
...........
الـ Output للمثال:
Welcome to Python ******Welcome to Python*******
الدوال strip() وlstrip() و rstrip()
...........
str1 = " Welcome to Python "
str2 = "eee...Welcome to Python,,,ccc"
print(str1.strip())
print(str2.strip("e.,c"))
print(str1.lstrip())
print(str2.lstrip("e."))
print(str1.rstrip())
print(str2.rstrip(",c"))
...........
الـ Output للمثال:
Welcome to Python Welcome to Python Welcome to Python Welcome to Python,,,ccc Welcome to Python eee...Welcome to Python
دوال البحث مع String
ويوضح الشكل التالي أهم دوال البحث المستخدمة مع string في بايثون:
وهنا أمثلة على طريقة عمل دوال البحث مع String في Python:
...........
str1 = "Welcome to Python"
print(str1.find("e"))
print(str1.find("e",3,10))
print(str1.index("e"))
print(str1.index("e",3,10))
print(str1.rfind("e"))
print(str1.rfind("e",0,5))
print(str1.rindex("e"))
print(str1.rindex("e",0,5))
...........
جمع وتقسيم الـ String
توفر python دالة join() لجمع عدد من string في string واحد. و للتقسيم string توفر python مجموعة دوال للجمع والتقسيم و يوضح الشكل التالي عمل دوال الجمع والتقسيم :
وهنا أمثلة على استخدام الدالة join() لدمج Sting
...........
tuple1 = ("Welcome", "To", "Python")
list1 = ["Welcome", "To", "Python"]
dir1 = {"name":"Mona", "country": "Saudi Arabia"}
str1 = "Python"
str2 = "123"
print("*".join(tuple1))
print(",".join(list1))
print("-".join(dir1))
print("+".join(str2))
print(str2.join(list1))
print(str1.join(str2))
print(str2.join(dir1))
...........
الـ Output للمثال:
Welcome*To*Python Welcome,To,Python name-country 1+2+3 Welcome123To123Python 1Python2Python3 name123country
وهنا أمثلة على طريقة عمل دوال تقسيم الـ String في بايثون:
...........
str1 = "Welcome to Python"
print(str1.split())
str2 = "Welcome*to*Python"
print(str2.split("*"))
print(str2.split("*",1))
str3 = "Welcome\nto\nPython"
print(str3.splitlines())
str4 = "Welcome to Python, start the Python course"
print(str4.rsplit())
print(str4.rsplit(","))
print(str4.partition("start"))
...........
الـ Output للمثال:
['Welcome', 'to', 'Python'] ['Welcome', 'to', 'Python'] ['Welcome', 'to*Python'] ['Welcome', 'to', 'Python'] ['Welcome', 'to', 'Python,', 'start', 'the', 'Python', 'course'] ['Welcome to Python', ' start the Python course'] ('Welcome to Python, ', 'start', ' the Python course')
دوال التحقق مع String
توفر Python مجموعة دوال التحقق التي تعمل على التحقق اما من احتواء الـ String على قيم معينة أو من حالة الأحرف في String ويوضح الشكل التالي هذه الدوال مع وظائفها :
جرب النتائج للأمثلة التالية لمجموعة دوال التحقق من String:
...........
str1 = "Welcome to Python"
str2 = "Python"
str3 = "123"
#String verifying functions in Python
print(str1.isalnum())
print(str1.isspace())
print(str2.isalpha())
print(str3.isdigit())
print(str3.isdecimal())
print(str3.isnumeric())
print(str1.istitle())
print(str1.isprintable()
print(str1.isidentifier())
print(str1.isupper())
print(str1.islower())
...........
بعض الدوال التي تعمل مع String
توفر Python كذلك مجموعة التي تعمل مع الـ string مثل الدوال التي تتضح في الشكل التالي:
...........
str1 = "Welcome to Python"
print(len(str1))
print(str1.count("e"))
str2 ="Python"
print(str2.zfill(15))
str3 = str1.replace("Python","JavaScript")
print(str3)
...........
الـ Output للمثال:
17 2 000000000Python Welcome to JavaScript
String Formatting
تساعد الدالة format() على تنسيق ظهور القيم ضمن string ويوضح المثال التالي طريقة عمل الدالة format() :
...........
x = 15
y = 10
print('the numbers are :{} {}'.format(x , y))
print('the numbers are :{0} {1}'.format(x , y))
print('the numbers are :{1} {0}'.format(x , y))
print("==================================="))
print('the numbers are :{a} {b}'.format(a =x , b = y))
print('the numbers are :{b} {a}'.format(b =x , a = y))
print("===================================")
str1 = "The grade is {grade: .2f}"
print (str1.format(grade = 77.753))
...........
الـ Output للمثال:
the numbers are :15 10 the numbers are :15 10 the numbers are :10 15 =================================== the numbers are :15 10 the numbers are :15 10 =================================== The grade is 77.75
نلاحظ في في الأمثلة السابقة تعدد طُرق إدراج القيم في string بواسط الدالة format() كما تعدد أشكال تنسيق القيم في من خلال تحديد نوع التنسيق المطلوب في المثال الأخير رأئينا استخدام 2f ويعني ظهور رقمين بعد الفاصلة العشرية والشكل التالي يوضح أهم رموز التنسيق لقيم البيانات الرقمية:
لاحظ /ي النتائج للأمثلة التالية :
...........
x = 1250
print('the number is :{:d} '.format(x))
print('the number is :{:b} '.format(x))
print('the number is :{:o} '.format(x))
print('the number is :{:X} '.format(x))
print('the number is :{:x} '.format(x))
print('the number is :{:.3f} '.format(x))
print('the number is :{:e} '.format(x))
print("===================================")
y = float("nan")
print('the number is :{:f} '.format(y))
print('the number is :{:F} '.format(y))
...........
الـ Output للمثال:
17 the number is :1250 the number is :10011100010 the number is :2342 the number is :4E2 the number is :4e2 the number is :1250.000 the number is :1.250000e+03 the number is :1.250000E+03 =================================== the number is :nan the number is :NAN
مع الدالة format() يمكن تنسيق المسافات والرموز الظاهرة مع القيم ويوضح الشكل التالي أهم الرموز المستخدمة :
لاحظ /ي النتائج للأمثلة التالية :
...........
x = -15
y = 17
print('the numbers are :{0:} {1:5}'.format(x , y))
print('the numbers are :{0:<5} {1:>5}'.format(x , y))
print('the numbers are :{0:^5} {1:^5}'.format(x , y))
print('the numbers are :{0:=5} {1:+}'.format(x , y))
print('the numbers are :{0:-} {1:}'.format(x , y))
print('the numbers are :{0:<5} {1:+5}'.format(x , y))
print("===================================")
z = 15 * 354 * 1000
print('the number is :{:_} '.format(z))
print('the number is :{:,} '.format(z))
print('the number is :{:,} '.format(z).replace(',','.'))
print('the number is :{:f} '.format(z))
print('the number is :{:.3f} '.format(z))
...........
الـ Output للمثال:
the numbers are :-15 17 the numbers are :-15 17 the numbers are : -15 17 the numbers are :- 15 +17 the numbers are :-15 17 the numbers are :-15 +17 =================================== the number is :5_310_000 the number is :5,310,000 the number is :5.310.000 the number is :5310000.000000 the number is :5310000.000
ويمكن استعمال صيغة مختصرة للـ format كما في المثال كتالي :
...........
x = 45
print(f'the number is :{x:.3f} ')
...........
التشفير Encoding وفك التشفير Decoding للبيانات النصية String
للتشفير string توفر Python الدوال encode() للتشفير و decode() لفك التشفير وفيما يلي شرح طريقة العمل معها:
دالة التشفير encode()
تقوم الدالة encode () بإرجاع نسخة مشفرة من string بنظام التشفير المحدد وإذا لم يحدد نظام التشفير هو فإن تشفير الـ string يكون بالنظام الافتراضي و هو " UTF-8" . و يمكن إعطاء نظام لمعالجة الأخطاء و لتعيين نظام معالجة أخطاء مختلف يتم تحديد نظام معين. عند استدعاء الدالة فالصيغة العامة للدالة التشفير تكون :
string.encode(encoding=encoding, errors=errors)
هذه الـ Parameters هي اختارية وتعني :
encoding التشفير وهنا يمكن أن نحدد نظام التشفير المستخدم (وللإطلاع على أنظمة التشفير يرجى زيارة الرابط هنا ).
errors الأخطاء ومن هنا يمكن أن نعيين نظام لمعالجة الأخطاء. والنظام الافتراضي لمعالجة الأخطاء هو "strict" وقيم أخرى محتملة مثل "ignore" و "replace" و "xmlcharrefreplace" و "backslashreplace" و" namereplace" أو أي اسم آخر مسجل عبر برنامج الترميز. ويوضح الشكل التالي معنى كل من هذه الانظمة :
وهنا مثال على طريقة استخدام دالة التشفير encoding() مع String لنجرب وضع الضمة العربية في الجملة
...........
str0 = "Welcom toُ Python"
enstr0 = str0.encode(encoding='utf8')
print('The encoding string is : ')
print(enstr0)
...........
الـ Output للمثال:
The encoding string is : b'Welcom to\xd9\x8f Python'
دالة فك التشفير decode()
تقوم دالة decode () بفك تشفير الـ string باستخدام برنامج الترميز المسجل للتشفير. تعيينه افتراضيًا على ترميز string الافتراضي. والصيغة العامة لها تكون
string.decode(encoding=encoding, errors=errors)
تماماً كما في دالة التشفير encode() يمكن أن تستخدم دالة فك التشفير الـ Parameters التالية بشكل اختياري وفي حال عدم التحديد ستأخذ القيم الإفتراضية :
encoding فك وهنا نحدد النظام المستخدم لفك التشفير و الإفتراضي هو 'UTF-8'.
errors وهنا نحدد طريقة معالجة الأخطاء و والقيمة الافتراضية له هي 'strict'.
وهنا مثال على طريقة استخدام دالة فك التشفير decode()
...........
str0 = "Welcom toُ Python"
enstr0 = str0.encode(encoding='utf8')
print('The encoding string is : ')
print(enstr0)
print('The decodein string is: ')
print(enstr0.decode('UTF-8', 'strict'))
...........
الـ Output للمثال:
The encoding string is : b'Welcom to\xd9\x8f Python' The decodein string is: Welcom toُ Python
إلى هنا ينتهي هذا المقال الذي تكلم عن طريقة العمل مع البيانات النصية String من خلال تعليمات Python تعرفنا على أهم المعاملات والدوال المستخدمة مع String وأهمها دالة التنسيق format() و دوال التشفير وفك التشفير encode() و decode() .