簡體   English   中英

IndexError:字符串索引超出范圍,無法讀取十六進制文件

[英]IndexError: string index out of range reading Hexadecimal file

我正在嘗試從error.pat復制數據並以新格式對其進行編輯,但是有時我會遇到以下錯誤:

IndexError: string index out of range

error.pat中的原始數據(僅是此文件的一部分)

下面是我想要的格式(每行列出20個十六進制數字)

45 72 4c 67 01 00 e5 00 00 00 00 00 04 03 00 03 a3 05 00 00
45 72 4c 67 02 00 07 00 01 00 00 00 d1 00 01 01 f4 05 4a 00
45 72 4c 67 03 00 07 00 01 00 00 00 0d 00 01 01 f4 05 4a 00
52 64 45 72 02 00 b4 22 da 21 97 22 88 22 fe 21 13 22 ec 21
45 72 4c 67 04 00 07 00 01 00 00 00 0d 00 01 01 f5 05 4a 00
52 64 45 72 00 00 b6 22 d8 21 98 22 8a 22 fd 21 fe 21 f1 21
45 72 4c 67 05 00 07 00 01 00 00 00 d1 00 01 01 f6 05 00 00
45 72 4c 67 06 00 07 00 01 00 00 00 0d 00 01 01 f6 05 00 00

下面是我的代碼:

f = open('error.pat')

for line in f:
    for i in range(0,4):
        for j in range(0,4):
            for k in range(0,5):  
                print format(ord(line[i*20+j*5+k]),'02x'),
        print

當i的范圍小於9時,我可以獲得正常結果。下面是range為(0,4)時的結果

45 72 4c 67 01 00 e5 00 00 00 00 00 04 03 00 03 a3 05 00 00
45 72 4c 67 02 00 07 00 01 00 00 00 d1 00 01 01 f4 05 4a 00
45 72 4c 67 03 00 07 00 01 00 00 00 0d 00 01 01 f4 05 4a 00
52 64 45 72 02 00 b4 22 da 21 97 22 88 22 fe 21 13 22 ec 21

但是當我將其設置為(0,10)時,它將顯示如下錯誤:

%run "C:/my_python_modules/original new trial.py"
45 72 4c 67 01 00 e5 00 00 00 00 00 04 03 00 03 a3 05 00 00
45 72 4c 67 02 00 07 00 01 00 00 00 d1 00 01 01 f4 05 4a 00
45 72 4c 67 03 00 07 00 01 00 00 00 0d 00 01 01 f4 05 4a 00
52 64 45 72 02 00 b4 22 da 21 97 22 88 22 fe 21 13 22 ec 21
45 72 4c 67 04 00 07 00 01 00 00 00 0d 00 01 01 f5 05 4a 00
52 64 45 72 00 00 b6 22 d8 21 98 22 8a 22 fd 21 fe 21 f1 21
45 72 4c 67 05 00 07 00 01 00 00 00 d1 00 01 01 f6 05 00 00
45 72 4c 67 06 00 07 00 01 00 00 00 0d 00 01 01 f6 05 00 00
52 64 45 72 01 00 48 22 4f 22 5e 22 72 22 fa 21
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
C:\Program Files\Enthought\Canopy\App\appdata\canopy-1.4.1.1975.win-x86_64\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    195             else:
    196                 filename = fname
--> 197             exec compile(scripttext, filename, 'exec') in glob, loc
    198     else:
    199         def execfile(fname, *where):

C:\my_python_modules\original new trial.py in <module>()
      5         for j in range(0,4):
      6             for k in range(0,5):
----> 7                 print format(ord(line[i*20+j*5+k]),'02x'),
      8         print
      9 

IndexError: string index out of range 

我檢查了原始文件,下面仍然應該有很多數據。

謝謝您的幫助,指示哪一部分是錯誤的以及如何解決此問題。

您無法從具有二進制數據的文件中讀取 如果要每行顯示n個字節,請在每次循環迭代中讀取n個字節,然后進行轉換和打印。 另外,您應該以二進制模式打開二進制文件。 否則,不能保證您獲得文件1:1的內容,甚至不是全部。

from functools import partial


def main():
    bytes_per_line = 20
    with open('error.pat', 'rb') as binary_file:
        for block in iter(partial(binary_file.read, bytes_per_line), ''):
            print ' '.join('{0:02x}'.format(ord(b)) for b in block)


if __name__ == '__main__':
    main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM