微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML 列表元素将字符串转换为 int

如何解决XML 列表元素将字符串转换为 int

我从网上读取了一个 XML 文件,对其进行解码并将其放入一棵树中进行解析:

data = openedurl.read()
xml = data.decode()
tree = ET.fromstring(xml)
counts = tree.findall('.//count')   

我返回以下计数元素:

我检查类型及其列表:

列表中填充了字符串数字。目标是将其从字符串转换为整数。

我知道我能做到:

mylist =[]
for count in counts:
    mylist.append(int(count.text))

我也能做到:

mylist = [int(count.text) for count in counts]

我尝试使用 map 但我没有成功,我得到:

counts = list(map(int,counts))
TypeError: int() argument must be a string,a bytes-like object or a number,not 'xml.etree.ElementTree.Element'

有没有办法使用 map 做到这一点? 我也应该没有为理解创建一个新列表 mylist 而只是这样做:

counts = [int(count.text) for count in counts]

我只是想更好地编写代码并更好地理解什么以及为什么。

谢谢

解决方法

在前两种情况下,您执行 count.text 以获得 text。但是,在使用 map 时,您只需将 int 函数直接应用于 count,而不是 count.text

由于 count 是一个 Element 对象而不是字符串,因此您会收到错误:

TypeError: int() 参数必须是字符串、类似字节的对象或 数字,而不是“xml.etree.ElementTree.Element”

如果您想使用 map 来获取计数列表,您可以像这样在 map 中使用 lambda expression

mylist = list(map(lambda x: int(x.text),counts))

这样,int 函数就应用于 count 内的字符串(在本例中为 x.text)。

关于你的第二个问题

counts = [int(count.text) for count in counts]

对比

mylist = [int(count.text) for count in counts]

这完全是您的选择。如果您以后想重新使用原来的 counts,请不要覆盖它,而是创建一个新的 mylist;否则,覆盖现有的 counts 完全没问题。

,

将找到所有计数元素总和的 PFB 代码:

import urllib.request
import xml.etree.ElementTree as ET

url = 'http://py4e-data.dr-chuck.net/comments_42.xml'
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
data = response.read()
xml = data.decode()
tree = ET.fromstring(xml)

counts = tree.findall('.//count')

count_lst = []
sum = 0
for count in counts:
    count_lst.append(int(count.text))
    sum = sum + int(count.text)

print('count_lst: ',count_lst)
print('sum of all counts: ',sum)

输出:

count_lst:  [97,97,90,88,87,80,79,78,76,72,66,65,64,61,59,58,57,54,51,49,47,40,38,37,36,32,25,24,22,21,19,18,14,12,9,7,3,2]

sum of all counts:  2553

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?