معالجة البيانات النصية String مع Python

string في Python الدوال string methods والمعاملات string operators والتنسيق format و التشفير encode وفك التشفير decode

معالجة البيانات النصية String مع Python

يعتبر نوع البيانات النصية String من بين الأنواع الأكثر شيوعًا في Python. وتعدد طُرق معالجة البيانات النصية String في بايثون… فكيف يتم التعامل مع String من خلال تعليمات Python … ؟؟!!

معالجة  البيانات النصية String مع Python

تعرفنا فى مقالات سابقة على أنواع البيانات في Python وفي مقال أنواع البيانات في Python ذكرنا لمحة موجزة عن نوع البيانات النصية string اولتعامل معها وفي هذا المقال سنتناول طريقة معالجة  لبيانات  النصية String في بايثون بالتفصيل لنبدأ…


البيانات النصية String في Python

تصنف البيانات النصية String أو سلال الحروف ضمن مجموعات البيانات المتسلسلة و تعتبر في Python في معظم لغات البرمجة كا Object للـ Data Structure و تتمثل في Python بـ str class . وتوفر Python العديد من الدوال والمعاملات للعمل معها. في هذا المقال سنستعرض طرق التعامل مع String في Python فسوف نشرح التالي:



إنشاء  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. وتتضح بعض استخداماته في الشكل التالي :

Python-persent_operator

وفيما يلي أمثلة على هذه على استخدام هذه المعاملات مع البيانات النصية 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 ووظيفة كلاً منها:

Python-escape-characters

وهنا مثال يوضح طريقة استخدام أحرف الهروب 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

توفر Python مجموعة دوال تجري تعديل على الأحرف في String بنا على حالتها الأصلية ومنها يتضح في الشكل التالي:

Python-string-change-case-functions

وهنا أمثلة توضح طريقة استخدامها مع 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 مع عدد من الدوال تتضح في الشكل التالي :

Python-string-align-and-whitespaces-functions

وهنا أمثلة على طريقة استخدام دوال صبط المحاذاة والمسافات لبادءة للـ 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 في بايثون:

Python-string-search-functions

وهنا أمثلة على طريقة عمل دوال البحث مع 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 مجموعة دوال للجمع والتقسيم  و يوضح الشكل التالي عمل دوال الجمع والتقسيم :

Python-join-and-split-string

وهنا أمثلة على استخدام الدالة 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 ويوضح الشكل التالي هذه الدوال مع وظائفها :

Python-string-verify-functions

جرب النتائج للأمثلة التالية لمجموعة دوال التحقق من 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 مثل الدوال التي تتضح في الشكل التالي:

Python-some-string-functions


...........
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 ويعني ظهور رقمين بعد الفاصلة العشرية والشكل التالي يوضح أهم رموز التنسيق لقيم البيانات الرقمية:

Python-string-format-numeric

لاحظ /ي النتائج للأمثلة التالية :


...........
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() يمكن تنسيق المسافات والرموز الظاهرة مع القيم ويوضح الشكل التالي أهم الرموز المستخدمة :

Python-string-format-symbols

لاحظ /ي النتائج للأمثلة التالية :


...........
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" أو أي اسم آخر مسجل عبر برنامج الترميز. ويوضح الشكل التالي معنى كل من هذه الانظمة :

Python-string-encoding-handling-errors

وهنا مثال على طريقة استخدام دالة التشفير 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() .



إرسال تعليق

فضلاً اترك تعليق
موافقة ملفات تعريف الارتباط
لتحسين تجربتك… يستخدم موقعنا ملفات تعريف الارتباط (Cookies)
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.