Python TypeError:/:';str';和';int';对于

Python TypeError:/:';str';和';int';对于,python,regex,typeerror,quantifiers,Python,Regex,Typeerror,Quantifiers,我正在使用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

我正在使用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:不支持/:'str'和'int'的操作数类型

我怎样才能解决这个问题


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

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

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

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

模块信息中的i的
:
行=[i[0],i[1],“%d”%(int(i[2],16)/1024)]
writer.writerow(行)
在列表中循环并打印
时:

lst中的i的
>>:
行=[i[0],i[1],“%d”%(int(i[2],16)/1024)]
打印(行)
['file1.o','.text',0']
['file2.o','.initvector','0']
['15', '31', '0']
在每次迭代中,
的第二个元素是
“0”
,因为
%d”
占位符将
(int(i[2],16)/1024)
作为整数插入。如果需要完整的十进制表示形式,我建议您只插入字符串(使用
“%s”

lst中的i的
>>:
行=[i[0],i[1],“%s”%(int(i[2],16)/1024)]
打印(行)
['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+”时,我尝试使用贪婪量词

因此,现在写入文件更改此

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

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

用1024除法只是为了得到以千字节为单位的值,同时从十六进制改为十进制。我决定放弃它,在excel中执行这些操作


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


这回答了你的问题吗


是的。我现在有了新的认识。

您正在尝试将
'0x30'
等字符串划分为1024。你想做什么还不清楚,你没有提供足够的背景来说明你想要实现什么,这使得你不可能帮助你。是的,没错。我想得到以千字节为单位的十六进制值,这就是为什么。问题是0x30被视为字符串,而不是十六进制编号。即使我删除了除以1024。我得到“TypeError:'str'对象不可调用”这是否回答了您的问题?这与您在此接受的答案完全相同:
int(hex_str,16)
:)此外,您发布的更新没有解释此代码更改如何提供十进制十六进制数除以1024。需要详细说明吗?
ValueError:以10为基数的int()的文本无效:“0x30”
int(i[2],base=16)感谢您回答我的问题。我找到了另一种解决问题的方法,在文件解析过程中正确读取数据。我将用适当的评论更新我的问题。
for i in module_info:
    row = [i[0], i[1], (i[2])]
    writer.writerow(row)