我是一名业余程序员。每次我运行脚本消息
对于具有基数10的int()的无效文字
来。
该代码用于将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 :(得分:2)
问题是linep [2]并不总是采用您期望的格式。正如Kamal Sadek正确指出的那样,问题在于文件的第一行和最后五行,其中linesp [2]不是十六进制数。
解决这个问题的方法是添加
if not linesp[2].startswith('0x'):
continue
之前
start = int(linesp[2],16)
答案 1 :(得分: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:分区名称......)。您可以更改文件以删除最后5行或更改脚本,以便在文件不再具有有效输入时停止读取文件。
您还必须使用标题删除第一行,因为这也会弄乱格式化。这一行
Part_Name Size StartAddr Type MapTo
见denys.fridman的答案。