Как читать из одного файла и записывать в несколько других файлов

#python #file

#python #файл

Вопрос:

У меня есть файл, содержащий несколько изображений. Изображения разделены на пакеты, я назвал packet chunk в моем примере кода. Каждый фрагмент содержит заголовок с: count, UniqueID, start, length. Start содержит начальный индекс img_data в блоке, а length — это длина img_data в блоке. Количество выполняется от 0 до 255, и img_data из всех этих 256 фрагментов в совокупности формирует одно изображение. Перед чтением фрагментов я открываю ‘dummy.файл bin’, чтобы было на что записывать, иначе я получаю, что f не определено. В конце я удаляю ‘dummy.файл bin’. Проблема в том, что для начала мне нужна ссылка на файл. Хотя этот код работает, мне интересно, есть ли другой способ, кроме создания фиктивного файла, получить ссылку на файл. Первый фрагмент в ‘test_file.bin’ имеет hdr[‘count’] == 0, поэтому f.close() будет вызван на первой итерации. Вот почему мне нужно иметь ссылку на файл f перед входом в цикл for. Кроме того, на каждой итерации я записываю img_data в файл с помощью f.write(img_data), здесь мне также нужна ссылка на файл, которую необходимо определить перед входом в цикл for, на случай, если первый фрагмент имеет hdr[‘count’] != 0. Это лучшее решение? как вы обычно читаете из файла и создаете из него несколько других файлов?

 # read file, write several other files
import os

def read_chunks(filename, chunksize = 512):
    f = open(filename, 'rb')
    while True:
        chunk = f.read(chunksize)
        if chunk:
            yield chunk
        else:
            break

def parse_header(data):
    count = data[0]
    uniqueID = data[1]
    start = data[2]
    length = data[3]
    return {'count': count, 'uniqueID': uniqueID, 'start': start, 'length': length}

filename = 'test_file.bin'
f = open('dummy.bin', 'wb')
for chunk in read_chunks(filename):
    hdr = parse_header(chunk)
    if hdr['count'] == 0:
        f.close()
        img_filename = 'img_'   str(hdr['uniqueID'])   '.raw'
        f = open(img_filename, 'wb')
    img_data = chunk[hdr['start']: hdr['start']   hdr['length']]
    f.write(img_data)
print(type(f))
f.close()
os.remove('dummy.bin')
  

Комментарии:

1. Неясно, что работает, а что нет в вашем примере кода, или с какой проблемой вы сталкиваетесь. Пожалуйста, добавьте больше деталей, чтобы мы могли вам помочь.

2. Я изменил на описание проблемы. спасибо за любые предложения