2015-12-25 4 views
0

Я любительский программист. Everytime я бег скрипт сообщенияЗначение Ошибка по сценарию

недействительного буквальнога для междунаров() с базой 10

приходит.

Код предназначенный для создания файла dumchar_info в файле scatter.txt.

Код от this site

import sys 

import string 

import re 


ins = open("dumchar.txt", "rb") 

outs = open("scatter.txt", "wb") 

for line in ins: 

    linesp = re.split('\W+', line) 

    name = linesp[0].upper() 

    start = int(linesp[2],16) 

    block = linesp[5] 

    if block != 'misc': 

     start = start + 0x600000 

    outs.write(name + " " + string.replace(hex(start), "L", "") + "\n{\n}\n") 

ins.close() 

outs.close() 
+0

Вот ссылка файла dumchar_info https://drive.google.com/file/d/0B_THUoWuufO5Zmt3QU1ONlhMbzg/view? usp = docslist_api – user5717358

ответ

0

Проблема находится внутри файла, так как он начинается в формате, который вы ожидали, но, как вы продолжите читать, изменения формата в последних 5 линий. Вот что я говорю:

usrdata  0x000000013cc80000 0x0000000093300000 2 /dev/block/mmcblk0p7 
bmtpool  0x0000000001500000 0x00000000febf00a8 2 /dev/block/mmcblk0 
Part_Name:Partition name you should open; 
StartAddr:Start Address of partition; 
Type:Type of partition(MTD=1,EMMC=2) 
MapTo:actual device you operate 
Size:size of partition 

Это именно там, где она меняется от того, цифры, которые вы ищете, чтобы только что описания (part_name: Partition имя ...). Вы можете либо изменить файл, чтобы удалить последние 5 строк, либо изменить свой сценарий, чтобы он переставал читать файл, когда он больше не имеет действительных входов.

Вам также придется вырезать самую первую строку с заголовками, так как это тоже испортило форматирование. Таким образом, линия

Part_Name  Size StartAddr  Type MapTo 

См. Ответ denys.fridman.

+0

Но мне нужны usrdata и bmtpool для разброса, и есть только 4 строки. – user5717358

+0

Не те 4 строки, последние 5 строк в файле. Они начинаются с Part_Name и Size и продолжаются до конца файла. –

2

Проблема в том, что linesp [2] не всегда в том формате, который вы ожидаете от него. Как правильно указал Камаль Садек, проблема связана с первой и последней пятью строками файла, где linesp [2] не является шестнадцатеричным числом.

Способ решения этой проблемы будет добавление

if not linesp[2].startswith('0x'): 
    continue 

непосредственно перед

start = int(linesp[2],16) 
+0

Хорошо спасибо за быстрый ответ, я меняю его – user5717358

Смежные вопросы