Форум сайта python.su
0
Здравствуйте.
Начал писать на Питоне и возникла парочка проблем, пытался найти решение поиском, но неудачно.
Нужно сейчас разбить файл на блоки по 64 бита(это сделал нормально) и записать эти блоки в другой файл. Предполагается что файлы будут бинарными.
1)Файл считывается бесконечно. Как определить конец файла?
2)Как записать байты из массива outarr в выходной файл?
__author__ = 'Udav' import struct f = open("1.txt", "rb") out = open("2.txt", "wb") while 1: data = f.read(8) if data == "": break arr = bytearray(data) for i in arr: print(bin(i)) x = 0 for i in arr: x <<= 8 x += i #Тут будет XOR с дургим числом outarr = [0]*8 for i in range(8): outarr[7-i] = (x >> (i*8)) & 0xff #Для проверки совпадения данных print(x) print(bin(x)) for i in outarr: print(bin(i)) #Вот до сюда совпадает всё for i in outarr: print(outarr) outdata = struct.pack('b', i) out.write(outdata) print(outdata) f.close() out.close()
Офлайн
36
import struct from functools import reduce with open("1.txt", "rb") as fin, open("2.txt", "wb") as fout: data = fin.read(8) while data: data = struct.unpack("8B", data) num = reduce(lambda x, y: (x << 8) + y, data) data = struct.pack("8B", *[(num >> (i * 8)) & 0xFF for i in range(8)][::-1]) fout.write(data) data = fin.read(8)
Отредактировано pyuser (Апрель 14, 2014 05:13:27)
Офлайн