البايتات byte في بايثون

من موسوعة حسوب

البايتات هي تسلسلات لبايتات مفردة غير قابلة للتغيير (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 إلى يسار التسلسل الثنائي ليصبح التسلسل بالطول المحدد من قبل المستخدم.

انظر أيضًا

مصادر