繁体   English   中英

TypeError:不支持的操作数类型/:'str'和'int'

[英]TypeError: unsupported operand type(s) for /: 'str' and 'int' for

我正在使用 python 3.7

我的列表数据如下所示

[['file1.o', '.text', '0x30'], ['file2.o', '.initvector', '0x36'], ['15', '31', '0x72']]

我的代码

用于解析文件

 c = re.compile("^\w+.*(\w+)\s+([\.\w]+)\s+([\w\.]+).*$")

打印到 csv 文件使用

 for i in module_info:
    row = [i[0], i[1], "%d" %(i[2]/1024)]
    writer.writerow(row) 

我收到此错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int'

我怎样才能解决这个问题?

我已经更新了答案。 感谢所有贡献

错误是在i[2]/1024这个代码片段中生成的,其中i[2]实际上被解释为字符串,而1024被解释为 int。 这就是错误存在的原因。

您必须将字符串转换为数字

要将十六进制字符串转换为十进制数,请使用int(i[2], 16)

要将十六进制字符串转换为十进制数,请使用bin(int(i[2], 16))

使用您喜欢的转换类型并使用它。 我希望这能解决你的问题。

由于所有第二索引元素都是十六进制整数,因此您可以使用int() function 并将16 (基数 16)作为第二个参数传递。

for i in module_info:
    row = [i[0], i[1], "%d" % (int(i[2], 16) / 1024)]
    writer.writerow(row) 

遍历列表并打印row

>>> for i in lst:
        row = [i[0], i[1], "%d" % (int(i[2], 16) / 1024)]
        print(row)

    
['file1.o', '.text', '0']
['file2.o', '.initvector', '0']
['15', '31', '0']

每次迭代row的第二个元素是"0" ,因为"%d"占位符插入(int(i[2], 16) / 1024)作为 integer。 如果你想要完整的十进制表示,我建议只插入一个字符串(使用"%s" )。

>>> for i in lst:
        row = [i[0], i[1], "%s" % (int(i[2], 16) / 1024)]
        print(row)

    
['file1.o', '.text', '0.046875']
['file2.o', '.initvector', '0.052734375']
['15', '31', '0.111328125']

我改变了解析文件和读取其内容的方式。 当我只需要剥离“origin+”时,我试图使用贪婪的量词。

#regex input format     Origin+Size        Section          Module
#                       800a1010+000c7c    .Code.Cpu0       Adc.o    #old line

 c = re.compile("^\w+.*(\w+)\s+([\.\w]+)\s+([\w\.]+).*$")

 #new line
 c = re.compile("^\w+\+(\w+)\s+([\.\w]+)\s+([\w\.]+).*$")

所以现在写入文件更改

for i in module_info:
    row = [i[0], i[1], (i[2])]
    writer.writerow(row)    

此外,您发布的更新没有解释此代码更改如何提供十进制的十六进制数,除以 1024。需要详细说明吗?

除以 1024 只是为了获得千字节的值,同时从十六进制更改为十进制。 我决定放弃它并在 excel 中执行此类操作。

关于我从中受益的量词的参考讨论

这回答了你的问题了吗? 如何将十六进制字符串转换为十六进制数字

这回答了你的问题了吗? 如何将十六进制字符串转换为十六进制数字

是的,它确实。 我现在以新的眼光看待它。

i[2]是一个字符串,除非它看起来像数字。 尝试:

row = [i[0], i[1], "%d" %(int(i[2])/1024)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM