每个820字节保存到新文件

时间:2012-11-30 11:04:14

标签: python binary

我有一个文件(大小:20 mb |二进制文件)需要每820字节进行一次解析,820的内容保存到一个新文件中,文件名是2byte之间的字符串(ASCII)和16字节标记。

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    ^ THE FILENAME COMES FROM HERE    ^

好的,现在解释了挑战(我希望)我现在拥有的是:

#!/usr/bin/python

with open("file", "rb") as f:
    byte = f.read()
    if byte > 820:
        print "Reach the 1 record mark on the File you have defined "

但我也可以在这里看到一种可能性:

for f.read(820) in file:
   a = f.read()
   b = open("Iam_from_2_to_16_byte_string", w)
   b.write(a)
   b.close

我不知道的是如何迭代前820个字节然后接下来的820个字节和下一个820字节,直到文件结束,并且每次我执行新文件时抓取的最难的部分是2到16字节缓冲区,并在我拥有820字节的每个新文件中用作文件名。

2 个答案:

答案 0 :(得分:4)

iter() function可以传递一个函数和一个sentinel,用它来读取820字节块的文件:

for chunk in iter(lambda: f.read(820), ''):
    # chunk is now 820 bytes long, until the last chunk which *could* be shorter.

每次迭代,都会调用lambda函数,读取820字节,直到f.read(820)返回一个空字符串(表示EOF)。

块只是一个字符串,因此您可以使用切片来获取文件名:

filename = chunk[2:16]

一起使用:

with open("file", "rb") as f:
    for chunk in iter(lambda: f.read(820), ''):
        open(chunk[2:16], 'wb').write(chunk)

答案 1 :(得分:0)

Python的file方法read()有一个选项参数,用于设置要读取的字节数。它还将filepointer保留在读取字节的末尾,以便任何下一个调用将在先前读取的最后一个字节之后开始:

n = 820
with open("file", "rb") as f:
    while True:
        data = f.read(n)
        if not data:
            break
        # do stuff with data.
        # for example, get a filename
        filename = str(data[2:16])

以820为步骤迭代文件内容,直到达到EOF。