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全体をメモリに保持するのに十分なRAMがないことを考えるのに苦労しています... pythonは、メモリを最小化するための素晴らしい言語ではありません。時間のフットプリントですが、機能要件には素晴らしいです:)

于 2012-09-12T19:03:36.623 に答える