3

我需要读取二进制文件中某个字符串的位置,然后对后面的字节进行操作。字符串是'colr'(这是一个 JPEG 2000 文件),这是我目前所拥有的:

from collections import deque

f = open('my.jp2', 'rb')
bytes =  deque([], 4)
while ''.join(map(chr, bytes)) != 'colr':
    bytes.appendleft(ord(f.read(1)))

如果这有效:

bytes =  deque([0x63, 0x6F, 0x6C, 0x72], 4)
print ''.join(map(chr, bytes))

(返回'colr'),我不确定为什么我的循环中的测试永远不会评估为True. 我结束了旋转 - 只是挂起 - 当我通读整个文件时,我什至没有退出。

4

2 回答 2

2

将您的更改bytes.appendleft()bytes.append(),然后它将起作用-对我有用。

于 2012-09-12T21:11:38.817 回答
0
  with open("my.jpg","rb") as f:
       print f.read().split("colr",1)

如果你不想一次读完……那么

def preprocess(line):
    print "Do Something with this line"
def postprocess(line):
    print "Do something else with this line"
currentproc = preprocess
with open("my.jpg","rb") as f:
   for line in f:
       if "colr" in line:
           left,right = line.split("colr")
           preprocess(left)
           postprocess(right) 
           currentproc= postprocess
        else:
           currentproc(line)

它逐行而不是逐字节......但是嗯......我很难想到你没有足够的内存来将整个jpg保存在内存中...... python并不是一个真正的语言来最小化内存或时间足迹,但对于功能要求来说很棒:)

于 2012-09-12T19:03:36.623 回答