TypeError: unsupported operand type(s) for /: 'str' and 'int' for
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]
是一个字符串,除非它看起来像数字。尝试:
row = [i[0], i[1], "%d" %(int(i[2])/1024)]
由于所有第二个索引元素都是十六进制整数,您可以使用 int()
函数并将 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)
作为整数插入。如果你想要完整的十进制表示,我建议只插入一个字符串(使用 "%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']
错误是在 i[2]/1024
这段代码中生成的,其中 i[2]
实际上被解释为字符串,而 1024
被解释为 int。这就是错误所在的原因。
您必须将字符串转换为数字
要将十六进制字符串转换为十进制数,请使用int(i[2], 16)
要将十六进制字符串转换为十进制数,请使用bin(int(i[2], 16))
使用您喜欢的转换类型并使用它。我希望这能解决您的问题。
我改变了解析文件和读取其内容的方式。当我只需要去掉“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)
Also, the update that you posted does not explain how this code change provides the hex number in decimal, divide by 1024. Care to elaborate?
除以 1024 只是为了得到以千字节为单位的值,同时从十六进制变为十进制。我决定放弃它并在 excel.
中进行此类操作
Reference discussion on quantifiers that i got benefit from
这是否回答了您的问题?如何将十六进制字符串转换为十六进制数
Does this answer your question? How to convert a hex string to hex number
是的。我现在对它有了新的认识。
我正在使用 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]
是一个字符串,除非它看起来像数字。尝试:
row = [i[0], i[1], "%d" %(int(i[2])/1024)]
由于所有第二个索引元素都是十六进制整数,您可以使用 int()
函数并将 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)
作为整数插入。如果你想要完整的十进制表示,我建议只插入一个字符串(使用 "%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']
错误是在 i[2]/1024
这段代码中生成的,其中 i[2]
实际上被解释为字符串,而 1024
被解释为 int。这就是错误所在的原因。
您必须将字符串转换为数字
要将十六进制字符串转换为十进制数,请使用int(i[2], 16)
要将十六进制字符串转换为十进制数,请使用bin(int(i[2], 16))
使用您喜欢的转换类型并使用它。我希望这能解决您的问题。
我改变了解析文件和读取其内容的方式。当我只需要去掉“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)
Also, the update that you posted does not explain how this code change provides the hex number in decimal, divide by 1024. Care to elaborate?
除以 1024 只是为了得到以千字节为单位的值,同时从十六进制变为十进制。我决定放弃它并在 excel.
中进行此类操作Reference discussion on quantifiers that i got benefit from
这是否回答了您的问题?如何将十六进制字符串转换为十六进制数
Does this answer your question? How to convert a hex string to hex number
是的。我现在对它有了新的认识。