• 0

قراءه اي ملف في بايثون على هيئة binary

قراءة من ملف وعمل لوب كل مرة تقرأ 8 بايت وإخراج الناتج مثل هذا

11111110101001010101110011101010010101010100110010101010101001

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
#########################       إنشاء ملف ثنائي    ############
# إنشاء ملف ثنائي
# w تشير إلى وضع الكتابة 
# b تشير إلى ملف ثنائي
f=open("binfile.bin","wb")
# تعريف مصفوفة
num=[5, 10, 15, 20, 25]
# تحويلها لصيغة ثنائية
arr=bytearray(num)
# كتابتها في ملف
f.write(arr)
f.close()
#########################                    قراءته    ##############
import pathlib
s=""
for byte in pathlib.Path("binfile.bin").read_bytes(): # decimal ستقرأ البايت وتحوله ل 
    s+="{0:b}".format(byte) # s  نحوله لثنائي مرة أخرى ونضيف ماقرأناه ل
print(s)
# 101101011111010011001

حيث أن pathlib تسمح لنا بالمرور على الملف بايت بايت.

تمّ تعديل بواسطة Ali Haidar Ahmad
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 40 دقائق مضت قال Ali Haidar Ahmad:

#########################       إنشاء ملف ثنائي    ############
# إنشاء ملف ثنائي
# w تشير إلى وضع الكتابة 
# b تشير إلى ملف ثنائي
f=open("binfile.bin","wb")
# تعريف مصفوفة
num=[5, 10, 15, 20, 25]
# تحويلها لصيغة ثنائية
arr=bytearray(num)
# كتابتها في ملف
f.write(arr)
f.close()
#########################                    قراءته    ##############
import pathlib
s=""
for byte in pathlib.Path("binfile.bin").read_bytes(): # decimal ستقرأ البايت وتحوله ل 
    s+="{0:b}".format(byte) # s  نحوله لثنائي مرة أخرى ونضيف ماقرأناه ل
print(s)
# 101101011111010011001

حيث أن pathlib تسمح لنا بالمرور على الملف بايت بايت.

 

بتاريخ 40 دقائق مضت قال Ali Haidar Ahmad:

#########################       إنشاء ملف ثنائي    ############
# إنشاء ملف ثنائي
# w تشير إلى وضع الكتابة 
# b تشير إلى ملف ثنائي
f=open("binfile.bin","wb")
# تعريف مصفوفة
num=[5, 10, 15, 20, 25]
# تحويلها لصيغة ثنائية
arr=bytearray(num)
# كتابتها في ملف
f.write(arr)
f.close()
#########################                    قراءته    ##############
import pathlib
s=""
for byte in pathlib.Path("binfile.bin").read_bytes(): # decimal ستقرأ البايت وتحوله ل 
    s+="{0:b}".format(byte) # s  نحوله لثنائي مرة أخرى ونضيف ماقرأناه ل
print(s)
# 101101011111010011001

حيث أن pathlib تسمح لنا بالمرور على الملف بايت بايت.

شكراً أخي الكريم على اجابتك لكن انا اريد اضعة في while وان يقرأ 8 بايت كل مرة

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 22 دقائق مضت قال Mostafa mahmoud3:

 

شكراً أخي الكريم على اجابتك لكن انا اريد اضعة في while وان يقرأ 8 بايت كل مرة

وما الغاية من وضعه ضمن while؟؟؟!

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 3 ساعات قال Mostafa mahmoud3:

 

شكراً أخي الكريم على اجابتك لكن انا اريد اضعة في while وان يقرأ 8 بايت كل مرة

عذراً لم أنتبه أنك تريد قراءة 8 بايتات ظننتها بتات، في هذه الحالة يمكنك القيام بذلك كالتالي:

f=open("binfile.bin","wb")
# تعريف مصفوفة
num=[5,10,15,20,25,3,4,1,6]
# تحويلها لصيغة ثنائية
arr=bytearray(num)
# كتابتها في ملف
f.write(arr)
f.close()
###########################################################
with open("binfile.bin", "rb") as f:    
    bytes = f.read(8)
    while bytes:
        s=''
        for i in list(bytes):
            s+="{0:b}".format(i)
        print(s)
        bytes = f.read(8)
f.close()
"""
101101011111010011001111001
110
"""

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 9 ساعات قال Ali Haidar Ahmad:

عذراً لم أنتبه أنك تريد قراءة 8 بايتات ظننتها بتات، في هذه الحالة يمكنك القيام بذلك كالتالي:


f=open("binfile.bin","wb")
# تعريف مصفوفة
num=[5,10,15,20,25,3,4,1,6]
# تحويلها لصيغة ثنائية
arr=bytearray(num)
# كتابتها في ملف
f.write(arr)
f.close()
###########################################################
with open("binfile.bin", "rb") as f:    
    bytes = f.read(8)
    while bytes:
        s=''
        for i in list(bytes):
            s+="{0:b}".format(i)
        print(s)
        bytes = f.read(8)
f.close()
"""
101101011111010011001111001
110
"""

 

شكرا اخي الكريم وبارك الله فيك الكود يعمل تمام ولكن هناك مشكلة هو انه يقوم بحذف الأصفار من بداية كل byte يعني لو أردنا أن نعيد كتابة هذة البيانات في ملف اخر لن نحصل على نفس الملف

انا اريد ان ارجع نفس الخطوات إلي الوراء لاصنع ملف اخر مشابة للملف الاول واسف على الإطالة

تمّ تعديل بواسطة Mostafa mahmoud3

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن