我有一个包含多个图像的文件。图像被切成包,在我的代码示例中,我将其称为包块。每个块都包含一个标头,其中包含: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')