Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2014 14:52:51

BoaConstrictor
Зарегистрирован: 2014-04-13
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись байтов в файл и признак конца файла

Здравствуйте.
Начал писать на Питоне и возникла парочка проблем, пытался найти решение поиском, но неудачно.
Нужно сейчас разбить файл на блоки по 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()

Офлайн

#2 Апрель 14, 2014 05:12:43

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Запись байтов в файл и признак конца файла

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version