脚本上的值错误

时间:2015-12-25 20:43:51

标签: python python-2.7

我是一名业余程序员。每次我运行脚本消息

  

对于具有基数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()

2 个答案:

答案 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的答案。