Mostafa mahmoud3 نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 اريد قراءة اي ملف على شكل 8 byte وعمل list اضع بها القيم كل حقل يحمل 8 byte مثل هذا 11111110101001010101110011101010010101010100110010101010101001 ثم اريد ان اعيد نفس البيانات التي في list لحالتها الأولى لاضعها في ملف اخر ليصبح نسخة من الملف الاول 1 اقتباس
1 سامح أشرف نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 بتاريخ 23 دقائق مضت قال Mostafa mahmoud3: اخي انا اريد ان أقرأ ملف فيديو مثلا ثم وعمل مصفوفة كل خانة 8 byte مثل هذا ['111001011111110101001010101110011101010010101010100110010101010101001', '110110011111110101001010101110011101010010101010100110010101010101001', '110010011111110101001010101110011101010010101010100110010101010101001'] ثم اعيد تحويل هذه المصفوفة الي ملف فيديو يحمل اسم اخر يكن نسخة من الاول هل يمكن ان تساعدني في هذا يمكنك أن تقوم تحويل محتوى أي ملف من خلال bytearray كالتالي: >>> path = "C:\\Users\\sameh\\OneDrive\\Desktop\\image.png" # مسار أي ملف >>> file = open(path, mode='rb') >>> content = file.read() >>> allBytes = bytearray(content) >>> eightBytes = [ allBytes[i:i+8] for i in range(0, len(allBytes), 8) ] >>> binaryList = [] >>> for chunk in eightBytes: ... eightBytesChunk = '' ... for i in chunk: ... eightBytesChunk += bin(i)[2:].zfill(8) ... binaryList.append(eightBytesChunk) >>> binaryList ['1000100101010000010011100100011100001101000010100001101000001010', '0000000000000000000000000000110101001001010010000100010001010010', '0000000000000000000000111000010000000000000000000000001001010001', '0000100000000110000000000000000000000000000111011100101001111001', '0001001100000000000000001000000000000000010010010100010001000001', '0101010001111000110110101110110010111101100001110111101100011011', '1101100101110101111111101111111111111101011001110111111010001001' .... ] لاحظ أنه يجب قراءة الملف بوضع rb (read binary) في الدالة open ولإعادة كتابة كود الـ binary إلى ملف جديد يمكنك أن تقوم بالتالي: >>> # نقوم بتقسيم كل أكواد Binary إلى Bytes >>> finalBinary = [] >>> lst = [] >>> for i in binaryList: ... lst.append([ i[x:x+8] for x in range(0, len(i), 8) ]) ... >>> for i in lst: ... for j in i: ... finalBinary.append(j) ... >>> finalBinary[0] '10001001' >>> # الدالة التالية تقوم بكتابة أرقم الـ Binary في ملف جديد >>> def writer(stuff): ... blob = int(stuff, 2).to_bytes(1, byteorder='big') ... with open("C:\\Users\\sameh\\OneDrive\\Desktop\\image2.png", "a+b") as file: ... file.write(blob) ... >>> for strings in finalBinary: ... writer(strings) >>> بالطبع هذه الطريقة ليست عملية في نسخ الملفات لأنها تستغرق الكثير من الوقت، وفي الحالات العادية نستخدم المكتبات مجهزة مسبقًا لنسخ الملفات مثل دالة copyfile في حزمة shutil 1 اقتباس
0 سامح أشرف نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 يمكن تحويل النص إلى قائمة من أرقام Binary من خلال تحويل كل حرف إلى رقم ascii عبر دالة ord وإستخدام دالة format لتحويل هذا الرقم إلى كود ثنائي Binary كالتالي: >>> string = "hello world" >>> binary_list = [format(ord(x), 'b') for x in string] >>> binary_list ['1101000', '1100101', '1101100', '1101100', '1101111', '100000', '1110111', '1101111', '1110010', '1101100', '1100100'] ولإعادة تحويل القائمة السابقة إلى نص مرة أخرى يمكن أن تقوم بالتالي: >>> ascii_string = "" # هنا سيتم تخزين النص النهائي >>> for binary_value in binary_list: ... an_integer = int(binary_value, 2) # تحويل كود Binary إلى النظام العشري (ascii code) ... ascii_character = chr(an_integer) # تحويل الحرف من ascii code إلى حرف نصي string ... ascii_string += ascii_character # إضافة الحرف إلى المتغير الأساسي ... >>> print(ascii_string) hello world 1 اقتباس
0 Mostafa mahmoud3 نشر 22 أغسطس 2021 الكاتب أرسل تقرير نشر 22 أغسطس 2021 بتاريخ 6 دقائق مضت قال سامح أشرف: يمكن تحويل النص إلى قائمة من أرقام Binary من خلال تحويل كل حرف إلى رقم ascii عبر دالة ord وإستخدام دالة format لتحويل هذا الرقم إلى كود ثنائي Binary كالتالي: >>> string = "hello world" >>> binary_list = [format(ord(x), 'b') for x in string] >>> binary_list ['1101000', '1100101', '1101100', '1101100', '1101111', '100000', '1110111', '1101111', '1110010', '1101100', '1100100'] ولإعادة تحويل القائمة السابقة إلى نص مرة أخرى يمكن أن تقوم بالتالي: >>> ascii_string = "" # هنا سيتم تخزين النص النهائي >>> for binary_value in binary_list: ... an_integer = int(binary_value, 2) # تحويل كود Binary إلى النظام العشري (ascii code) ... ascii_character = chr(an_integer) # تحويل الحرف من ascii code إلى حرف نصي string ... ascii_string += ascii_character # إضافة الحرف إلى المتغير الأساسي ... >>> print(ascii_string) hello world هل يمكن عمل هذا مع 8 byte مره واحده 1 اقتباس
0 سامح أشرف نشر 22 أغسطس 2021 أرسل تقرير نشر 22 أغسطس 2021 بتاريخ 12 دقائق مضت قال Mostafa mahmoud3: هل يمكن عمل هذا مع 8 byte مره واحده يمكن تقسيم المصفوفة بعد عملية التحويل إلى 8 Byte كالتالي: _8_bytes = [binary_list[x:x+8] for x in range(0, len(binary_list), 8)] أو يمكن تقسيم النص من البداية إلى قائمة list من النصوص والمرور على كل جزء على حدى كالتالي: >>> string = 'hello world' >>> list_of_string = [ string[i:i+8] for i in range(0, len(string), 8) ] >>> list_of_string ['hello wo', 'rld'] >>> for item in list_of_string: ... print([format(ord(x), 'b') for x in item]) ... ['1101000', '1100101', '1101100', '1101100', '1101111', '100000', '1110111', '1101111'] ['1110010', '1101100', '1100100'] بعد ذلك يمكنك أن تقوم بجمع عناصر القائمة الناتجة في النهاية لتكون على شكل نص، كالتالي: >>> string = 'hello world' >>> list_of_string = [ string[i:i+8] for i in range(0, len(string), 8) ] >>> list_of_string ['hello wo', 'rld'] >>> for item in list_of_string: ... print("".join([format(ord(x), 'b') for x in item])) ... 1101000110010111011001101100110111110000011101111101111 111001011011001100100 1 اقتباس
0 Mostafa mahmoud3 نشر 22 أغسطس 2021 الكاتب أرسل تقرير نشر 22 أغسطس 2021 بتاريخ 18 دقائق مضت قال سامح أشرف: يمكن تقسيم المصفوفة بعد عملية التحويل إلى 8 Byte كالتالي: _8_bytes = [binary_list[x:x+8] for x in range(0, len(binary_list), 8)] أو يمكن تقسيم النص من البداية إلى قائمة list من النصوص والمرور على كل جزء على حدى كالتالي: >>> string = 'hello world' >>> list_of_string = [ string[i:i+8] for i in range(0, len(string), 8) ] >>> list_of_string ['hello wo', 'rld'] >>> for item in list_of_string: ... print([format(ord(x), 'b') for x in item]) ... ['1101000', '1100101', '1101100', '1101100', '1101111', '100000', '1110111', '1101111'] ['1110010', '1101100', '1100100'] بعد ذلك يمكنك أن تقوم بجمع عناصر القائمة الناتجة في النهاية لتكون على شكل نص، كالتالي: >>> string = 'hello world' >>> list_of_string = [ string[i:i+8] for i in range(0, len(string), 8) ] >>> list_of_string ['hello wo', 'rld'] >>> for item in list_of_string: ... print("".join([format(ord(x), 'b') for x in item])) ... 1101000110010111011001101100110111110000011101111101111 111001011011001100100 اخي انا اريد ان أقرأ ملف فيديو مثلا ثم وعمل مصفوفة كل خانة 8 byte مثل هذا ['111001011111110101001010101110011101010010101010100110010101010101001', '110110011111110101001010101110011101010010101010100110010101010101001', '110010011111110101001010101110011101010010101010100110010101010101001'] ثم اعيد تحويل هذه المصفوفة الي ملف فيديو يحمل اسم اخر يكن نسخة من الاول هل يمكن ان تساعدني في هذا 1 اقتباس
0 Mostafa mahmoud3 نشر 22 أغسطس 2021 الكاتب أرسل تقرير نشر 22 أغسطس 2021 بتاريخ 44 دقائق مضت قال سامح أشرف: يمكنك أن تقوم تحويل محتوى أي ملف من خلال bytearray كالتالي: >>> path = "C:\\Users\\sameh\\OneDrive\\Desktop\\image.png" # مسار أي ملف >>> file = open(path, mode='rb') >>> content = file.read() >>> allBytes = bytearray(content) >>> eightBytes = [ allBytes[i:i+8] for i in range(0, len(allBytes), 8) ] >>> binaryList = [] >>> for chunk in eightBytes: ... eightBytesChunk = '' ... for i in chunk: ... eightBytesChunk += bin(i)[2:].zfill(8) ... binaryList.append(eightBytesChunk) >>> binaryList ['1000100101010000010011100100011100001101000010100001101000001010', '0000000000000000000000000000110101001001010010000100010001010010', '0000000000000000000000111000010000000000000000000000001001010001', '0000100000000110000000000000000000000000000111011100101001111001', '0001001100000000000000001000000000000000010010010100010001000001', '0101010001111000110110101110110010111101100001110111101100011011', '1101100101110101111111101111111111111101011001110111111010001001' .... ] لاحظ أنه يجب قراءة الملف بوضع rb (read binary) في الدالة open ولإعادة كتابة كود الـ binary إلى ملف جديد يمكنك أن تقوم بالتالي: >>> # نقوم بتقسيم كل أكواد Binary إلى Bytes >>> finalBinary = [] >>> lst = [] >>> for i in binaryList: ... lst.append([ i[x:x+8] for x in range(0, len(i), 8) ]) ... >>> for i in lst: ... for j in i: ... finalBinary.append(j) ... >>> finalBinary[0] '10001001' >>> # الدالة التالية تقوم بكتابة أرقم الـ Binary في ملف جديد >>> def writer(stuff): ... blob = int(stuff, 2).to_bytes(1, byteorder='big') ... with open("C:\\Users\\sameh\\OneDrive\\Desktop\\image2.png", "a+b") as file: ... file.write(blob) ... >>> for strings in finalBinary: ... writer(strings) >>> بالطبع هذه الطريقة ليست عملية في نسخ الملفات لأنها تستغرق الكثير من الوقت، وفي الحالات العادية نستخدم المكتبات مجهزة مسبقًا لنسخ الملفات مثل دالة copyfile في حزمة shutil شكراً اخي بارك الله فيك انا لا اريد النسخ مباشره إنما أريد ان اقوم ببعض العمليات على الكود قبل نقلة الي ملف اخر شكرا على المساعده اقتباس
السؤال
Mostafa mahmoud3
اريد قراءة اي ملف على شكل 8 byte وعمل list اضع بها القيم كل حقل يحمل 8 byte مثل هذا
11111110101001010101110011101010010101010100110010101010101001
ثم اريد ان اعيد نفس البيانات التي في list لحالتها الأولى لاضعها في ملف اخر ليصبح نسخة من الملف الاول
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.