![](/img/trans.png)
[英]IndexError: string index out of range for reading first line in a file python
[英]IndexError: string index out of range reading Hexadecimal file
我正在嘗試從error.pat復制數據並以新格式對其進行編輯,但是有時我會遇到以下錯誤:
IndexError: string index out of range
下面是我想要的格式(每行列出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.