首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用plant_catalog解析数据

用plant_catalog解析数据
EN

Stack Overflow用户
提问于 2021-06-15 00:38:31
回答 1查看 267关注 0票数 0

目前,我在Python类中解析数据时遇到了问题,我想知道是否有人能够为我的问题提供解决方案。下面是我正在做的作业的说明:

XML是许多接口和web服务的基础。因此,读取和操作XML数据是软件开发中的一项常见任务。

一家在线工厂分销商最近经历了海葵植物供应短缺的问题,价格上涨了20%。他们的植物目录是在XML文件中维护的,他们需要Python实用程序来查找工厂名称,读取当前价格,按指定的百分比更改它,并更新文件。写这个实用程序是你的任务。

使用Python,编写一个ElementTree程序来执行以下任务。请注意,程序的执行语法必须如下:

python xmlparse.py plant_catalog.xml plantName percentChange

  1. 使用ElementTree,在此任务中读取由命令行参数指定的XML文件plant_catalog.xml,如上面所示。
  2. 通过在命令行上作为参数传入的名称查找植物(plantName )。
  3. 一旦找到,就读取当前价格并通过命令行参数percentChange对其进行调整。请注意,此值可以是-90 < percentChange < 100.

范围内的任何值。

例如,如果您按以下方式运行您的脚本:

python plant_catalog.xml“希腊语瓦勒里安”-20

原始XML包含:

代码语言:javascript
复制
<PLANT>
    <COMMON>Greek Valerian</COMMON>
    <BOTANICAL>Polemonium caeruleum</BOTANICAL>
    <ZONE>Annual</ZONE>
    <LIGHT>Shade</LIGHT>
    <PRICE>4.36</PRICE>
    <AVAILABILITY>071499</AVAILABILITY>
  </PLANT>

生成的文件应包含:

代码语言:javascript
复制
<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文件中没有属性。因此,在尝试此赋值时不需要使用属性方法。

下面的代码片段将为您提供一个很好的起点:

代码语言:javascript
复制
# 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()

下面是我的代码:

代码语言:javascript
复制
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()

我的代码的问题是,当我编写代码时,我会在文件中得到一个错误。写(%)行,并显示它需要一个类似字节的对象,而不是浮点数。我不知道代码有什么问题,但如果有人能够提供解决方案,我将非常感激。

EN

回答 1

Stack Overflow用户

发布于 2021-06-15 01:32:48

我认为您要做的不是file.write(百分比),而是tree.write(文件)。您想要将树写入文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67978611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档