目前,我在Python类中解析数据时遇到了问题,我想知道是否有人能够为我的问题提供解决方案。下面是我正在做的作业的说明:
XML是许多接口和web服务的基础。因此,读取和操作XML数据是软件开发中的一项常见任务。
一家在线工厂分销商最近经历了海葵植物供应短缺的问题,价格上涨了20%。他们的植物目录是在XML文件中维护的,他们需要Python实用程序来查找工厂名称,读取当前价格,按指定的百分比更改它,并更新文件。写这个实用程序是你的任务。
使用Python,编写一个ElementTree程序来执行以下任务。请注意,程序的执行语法必须如下:
python xmlparse.py plant_catalog.xml plantName percentChange
范围内的任何值。
例如,如果您按以下方式运行您的脚本:
python plant_catalog.xml“希腊语瓦勒里安”-20
原始XML包含:
<PLANT>
<COMMON>Greek Valerian</COMMON>
<BOTANICAL>Polemonium caeruleum</BOTANICAL>
<ZONE>Annual</ZONE>
<LIGHT>Shade</LIGHT>
<PRICE>4.36</PRICE>
<AVAILABILITY>071499</AVAILABILITY>
</PLANT>生成的文件应包含:
<PLANT>
<COMMON>Greek Valerian</COMMON>
<BOTANICAL>Polemonium caeruleum</BOTANICAL>
<ZONE>Annual</ZONE>
<LIGHT>Shade</LIGHT>
<PRICE>3.48</PRICE>
<AVAILABILITY>071499</AVAILABILITY>
</PLANT>注意:如果你愿意的话,你可以降低计算的精度,但这不是必需的。
提示
因为XML只是一个文本文件,所以您可以编写代码来读取所有数据并解码XML信息。但是,我当然不推荐这种方法。相反,让Python为您做这件事!使用Python模块,将文件解析为ElementTree数据的“内存中”表示。解析完后,根(或起始位置)就像从树中请求它一样简单。有了根之后,就可以调用方法来查找要查找的内容,并对它们进行适当的修改。您将希望“查找”所有的工厂,“对于”结果中的“每个工厂”,您将希望将名称与在命令行中传递的名称进行比较。如果找到匹配,将应用百分比更改,将结果保存到树中。
当您完成搜索,您将“写”树回一个文件。我建议使用不同的文件名,否则您将不得不在每次运行时重新下载原始文件。
请注意,一定要阅读分布式系统文本中的XML。通过这样做和检查数据文件,您将不会发现XML文件中没有属性。因此,在尝试此赋值时不需要使用属性方法。
下面的代码片段将为您提供一个很好的起点:
# Calling arguments: plant_catalog.xml plantName percentChange
import xml.etree.ElementTree as ET
import sys
# input parameters
searchName = sys.argv[2]
percent = float(sys.argv[3])
# parse XML data file
tree = ET.parse(sys.argv[1])
root = tree.getroot()下面是我的代码:
import xml
import xml.etree.ElementTree as ET
import sys
searchName = sys.argv[2]
percent = float(sys.argv[3])
tree = ET.parse(sys.argv[1])
root = tree.getroot()
def main():
with open("plant_catalog.xml", "r") as file:
data = file.read()
for plant in root.findall("PLANT"):
name = plant.find("COMMON").text
if name == searchName:
original_price = float(plant.find("PRICE").text)
with open("plant_catalog - output.xml", "wb") as file:
file.write(percent)
def change_plant_price(plantName, newPrice):
root = ET.fromstring(xml)
plant = root.find(".//*[COMMON='{}']".format(plantName))
plant.find('PRICE').text = str(newPrice)
ET.dump(root)
if __name__ == "__main__":
main()我的代码的问题是,当我编写代码时,我会在文件中得到一个错误。写(%)行,并显示它需要一个类似字节的对象,而不是浮点数。我不知道代码有什么问题,但如果有人能够提供解决方案,我将非常感激。
发布于 2021-06-15 01:32:48
我认为您要做的不是file.write(百分比),而是tree.write(文件)。您想要将树写入文件
https://stackoverflow.com/questions/67978611
复制相似问题