如何从一个文件读取并写入其他几个文件

时间:2019-03-29 14:53:03

标签: python file

我有一个包含多个图像的文件。图像被切成包,在我的代码示例中,我将其称为包块。每个块都包含一个标头,其中包含:count,uniqueID,start,length。 Start包含块中img_data的开始索引,而length是块中img_data的长度。计数范围从0到255,所有这256个块的img_data组合形成一张图像。在读取这些块之前,我打开了一个'dummy.bin'文件来写一些东西,否则我得到f没有定义。最后,我删除了'dummy.bin'文件。问题是我需要一个文件引用开始。尽管此代码有效,但我想知道是否还有另一种方法来创建虚拟文件以获取文件引用。 “ test_file.bin”中的第一个块的hdr ['count'] == 0,因此将在第一次迭代中调用f.close()。这就是为什么在进入for循环之前我需要具有文件引用f的原因。除此之外,每次迭代我都会用f.write(img_data)将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')

0 个答案:

没有答案