البايتات في بايثون
البايتات هي تسلسلات لبايتات مفردة غير قابلة للتغيير (immutable)، وهي مشابهة إلى حدّ كبير للسلاسل النصية. توفّر هذه الكائنات توابع تكون صالحة للاستخدام مع البيانات ذات الترميز ASCII نظرًا لأنّ الكثير من البروتوكولات الثنائية الرئيسية مستندة إلى هذا الترميز.
تعريف البايتات
صيغة تعريف البايتات مماثلة لصيغة تعريف السلاسل النصية، باستثناء إضافة السابقة b
إلى عبارة التعريف وكما يلي:
b'still allows embedded "double" quotes' # علامات اقتباس مفردة
b"still allows embedded 'single' quotes". # علامات اقتباس مزدوجة
b'''3 single quotes''', b"""3 double quotes""" # علامات اقتباس ثلاثية
يسمح باستخدام حروف الترميز ASCII (بصرف النظر عن الترميز المستخدم في الشيفرة)، ويجب إدخال أي قيمة ثنائية تتجاوز القيمة 127
باستخدام تسلسل التهريب (escape sequence) الملائم. وكما هو الحال مع السلاسل النصية، فبالإمكان استخدام السابقة r
لإيقاف عملية تهريب الحروف.
صحيح أنّ تمثيل البايتات يستند إلى النصوص ذات الترميز ASCII؛ إلا أنّ كائنات البايتات تسلك في الواقع سلوك تسلسل من الأعداد الصحيحة غير قابل للتغيير، وتكون كل قيمة في هذا التسلسل مقيّدة بالشرط الرياضي 0 <= x < 256
، ويؤدي تجاوز هذه القيود إلى إطلاق الخطأ ValueError
.
وضعت هذه القيود بصورة متعمّدة وذلك لتأكيد فكرة مفادها أنّه قد يكون بإمكان بعض خوارزميات معالجة النصوص أن تتعامل مع البيانات الثنائية إلّا أنّ الحال لا يكون كذلك دائمًا؛ فقد يؤدي معالجة البيانات الثنائية غير المرمّزة بالترميز ASCII بواسطة خوارزميات التعامل مع النصوص إلى تدمير البيانات.
البايتات هي الكائن المُقابل غير القابل للتّغيير (immutable) لمصفوفات البايتات القابلة للتّغيير، وللبايتات نفس التّوابع والعمليّات (التي لا يُمكن لها أن تُغيّر من الكائن) التي تملكها مصفوفات البايتات.
الدالة bytes()
يمكن استخدام الدالة bytes()
كصيغة بديلة لتعريف البايتات:
bytes(10) # كائن بايتات فارغ وله طول محدّد
bytes(range(20)) # باستخدام مدى من الأعداد الصحيحة
طريقة استعمال المُعاملات مع الدالة bytes()
هي نفسها طريقة استعمال مُعاملات الدّالة bytearray()
.
الدوال التابعة للكائن bytes
bytes.fromhex()
تفكّ الدالة ترميز سلسلة نصية تتضمن أعداد ست عشرية إلى كائن bytes.
bytes.hex()
ترمّز الدالة كائن bytes إلى سلسلة نصية تتضمن عددين ستّ عشريين مقابل كلّ بايت.
bytes.count()
تعيد هذه الدالة عدد مرات ظهور تسلسل فرعي ضمن كائن bytes.
bytes.decode()
تفك الدالة ترميز البايتات الممرّرة إليها إلى سلسلة نصية.
bytes.endswith()
تتحقّق الدالة من وجود تسلسل فرعي في نهاية البيانات الثنائية الأصلية.
bytes.find()
تعيد الدالة أدنى قيمة للفهرس والذي يكون التسلسل الفرعي موجودًا في ضمن البيانات الثنائية.
bytes.index()
تؤدي هذه الدالة نفس وظيفة الدالة bytes.find()
ولكنّها تطلق الخطأ ValueError
إن لم تعثر على التسلسل الفرعي.
bytes.join()
تعيد الدالة كائن البياتات أو كائن مصفوفة البايتات الناتج عن ربط البيانات الثنائية التابعة لكائن قابل للتكرار (iterable).
bytes.maketrans()
تعيد هذه الدالة الساكنة جدول ترجمة (translation table) يمكن استخدامه بواسطة الدالة bytes.translate()
.
bytes.partition()
تقسم هذه الدالة التسلسل عند أول ظهور للقيمة التي يحدّدها المستخدم.
bytes.replace()
تبدّل هذه الدالة العبارة التي يختارها المستخدم - مهما تكرّرت في تسلسل البيانات الثنائية - بالقيمة الجديدة التي يحدّدها.
bytes.rfind()
تعيد الدالة أعلى قيمة للفهرس في التسلسل الأصلي حيث تجد فيه التسلسل الفرعي.
bytes.rindex()
تشبه الدالة bytes.rfind()
في أنّها تحدّد أعلى قيمة للفهرس تجد فيه التسلسل الفرعي ضمن التسلسل الأصلي، وتختلف عنها في أنّها تطلق الخطأ ValueError
إن لم تعثر على التسلسل الفرعي.
bytes.rpartition()
تقسم هذه الدالة البيانات الثنائية عند آخر ظهور للقيمة التي يحدّدها المستخدم.
bytes.startswith()
تتحقّق الدالة من أنّ البيانات الثنائية تبدأ بالقيمة التي يحدّدها المستخدم.
bytes.translate()
تعيد الدالة تسلسل البيانات الثنائية بعد إجراء عمليات الربط والحذف بالاعتماد على جدول الترجمة الذي تنشئه الدالة bytes.maketrans()
.
ملاحظة: تفترض الدوال التالية استخدام بيانات ثنائية متوافقة مع الترميز ASCII ولكن يمكن استخدامها مع أي نوع من البيانات الثنائية عن طريق تمرير المعاملات المناسبة.
bytes.center()
تعيد الدالة البيانات الثنائية مزاحة نحو الوسط ضمن تسلسل يحمل طولًا يحدّده المستخدم.
bytes.ljust()
تعيد الدالة نسخة من البيانات الثنائية مزاحة نحو اليسار ضمن تسلسل ذي طول محدّد.
bytes.lstrip()
تحذف الدالة البايتات المحدّدة من بداية التسلسل.
bytes.rjust()
تعيد الدالة نسخة من البيانات الثنائية مزاحة نحو اليمين ضمن تسلسل ذي طول محدّد.
bytes.rsplit()
تقسّم الدالة التسلسل الثنائي إلى تسلسلات فرعية من النوع ذاته بالاعتماد على تسلسل ثنائي يحدّد الفاصل.
bytes.rstrip()
تحذف الدالة البايتات المحدّدة من نهاية التسلسل.
bytes.split()
تقسّم الدالة التسلسل الثنائي إلى قائمة من تسلسلات ثنائية فرعية من النوع ذاته، بالاعتماد على فاصل محدّد.
bytes.strip()
تحذف الدالة البايتات المحدّدة من قبل المستخدم من نهاية وبداية التسلسل.
ملاحظة: تفترض الدوال التالية استخدام بيانات ثنائية متوافقة مع الترميز ASCII ولا يمكن استخدامها مع الأنواع الأخرى من البيانات الثنائية.
bytes.capitalize()
تفسر الدالة البيانات الثنائية كحروف في ترميز ASCII وتحوّل الحرف الأول إلى حرف كبير، والحروف الأخرى إلى حروف صغيرة.
bytes.expandtabs()
تحوّل الدالة جميع علامات الجدولة في ترميز ASCII إلى مسافة بيضاء واحدة أو أكثر في الترميز ذاته.
bytes.isalnum()
تتحقّق هذه الدالة ممّا إذا كانت جميع البايتات في التسلسل الثنائي حروفًا أو أرقامًا عشرية في ترميز ASCII، ومن أنّ التسلسل ليس فارغًا.
bytes.isalpha()
تتحقّق الدالة ممّا إذا كان تسلسل البيانات الثنائية يحتوي على الحروف بترميز ASCII فقط، وأنّ التسلسل ليس فارغًا.
bytes.isdigit()
تتحقّق الدالة ممّا إذا كان التسلسل الثنائي مكوّنًا من الأعداد العشرية بترميز ASCII فقط، وأنّ التسلسل ليس فارغًا.
bytes.islower()
تتحقّق الدالة ممّا إذا كان التسلسل الثنائي يحتوي على حرف واحد صغير على الأقل بترميز ASCII، وتتحقّق من عدم وجود حروف كبيرة.
bytes.isspace()
تتحقّق الدالة ممّا إذا كانت جميع البايتات في التسلسل الثنائي هي بايتات المسافة البيضاء في ترميز ASCII، ومن أنّ التسلسل ليس فارغًا.
bytes.istitle()
تتحقّق الدالة ممّا إذا كان التسلسل الثنائي هو تسلسل ASCII بحالة titlecase، ومن أنّ التسلسل ليس فارغًا.
bytes.isupper()
تتحقّق الدالة ممّا إذا كان التسلسل الثنائي يحتوي على حرف واحد كبير على الأقل بترميز ASCII، وتتحقّق من عدم وجود حروف صغيرة.
bytes.lower()
تحول الدالة جميع الحروف بترميز ASCII في التسلسل الثنائي إلى حروف صغيرة.
bytes.splitlines()
تقسم الدالة التسلسل الثنائي إلى قائمة من الأسطر.
bytes.swapcase()
تقلب الدالة حالة الحروف بترميز ASCII في التسلسل الثنائي.
bytes.title()
تحوّل الدالة أوائل الكلمات في التسلسل الثنائي إلى أحرف كبيرة Title Case بترميز ASCII.
bytes.upper()
تحول الدالة جميع الحروف بترميز ASCII في التسلسل الثنائي إلى حروف كبيرة.
bytes.zfill()
تضيف الدالة العدد b'0'
من الترميز ASCII إلى يسار التسلسل الثنائي ليصبح التسلسل بالطول المحدد من قبل المستخدم.
مصادر
- صفحة Built-in Types في توثيق بايثون الرسمي.
- قسم الدالة bytes في صفحة Functions في توثيق Python الرسمي.