【问题标题】:Filtering out items per year每年过滤掉项目
【发布时间】:2017-12-19 22:30:44
【问题描述】:

我正在尝试从 XML 中筛选出购买清单,直到它们被制作的年份。问题是日期格式如下:年/月/日。我使用 datetime 库解决了这个问题,但现在我不能使用年份来过滤自己的购买。

def purchasesPerYear(year):
listPurchases = treeDoc.xpath("//purchase")
for purchases in listPurchases:
    nrPurchases = purchases.xpath("count(//purchase)")
    date = purchases.xpath("//purchase/@date_of_purchase")[int(nrPurchases)-1]
    dateParsed = datetime.strptime(date, "%Y/%m/%d")
    if year == dataParsed.year:
        for n in range(int(nrPurchases)):
            purchaseid = purchases.xpath("@puid")
        return purchaseid
    else:
        purchaseid = purchadses.xpath("//purchase/@puid")
        return purchaseid

print("购买:", compraPorAno(2017))

print("data: ", dataParsed)

在这段代码中,如果任何购买中存在年份,我要么获得第一次购买,要么如果年份不存在,则获得所有购买。但是,我的第一个购买年份是 2016 年,其他所有购买年份都是 2017 年。基本上,如果我输入 2016 或 2017 年,我得到的只是第一次购买,而不是输入年份的每一次购买。

<compra coid="CO01" id="U01" data_de_compra="2016/10/15" estado="entregue">
            <produto iid="I01" quantidade="1">
                <transportadora nome="CTT"/>
            </produto>
        </compra>
        <compra coid="CO02" id="U01" data_de_compra="2017/10/15" estado="emExpedicao">
            <produto iid="I03" quantidade="1">
                <transportadora nome="SEUR"/>
            </produto>
        </compra>
        <compra coid="CO03" id="U03" data_de_compra="2017/10/20" estado="entregue">
            <produto iid="I01" quantidade="1" avaliacao="4">
                <transportadora nome="MRW"/>
            </produto>
        </compra>
        <compra coid="CO04" id="U03" data_de_compra="2017/10/20" estado="entregue">
            <produto iid="I02" quantidade="1" avaliacao="5">
                <transportadora nome="UPS"/>
            </produto>
        </compra>

【问题讨论】:

  • 您是否考虑用pandas 读取您的XML 文件,然后使用它?
  • 代码对吗?您将日期保存到dateParsed,但您正在检查dataParsed
  • 我正在做一个大学作业,很遗憾我需要用 Python 来做:(
  • 这是我发现的从 XML 中提取年份的唯一方法。
  • 能否提供 XML 供我们测试?

标签: python xml


【解决方案1】:

我已经设法通过完全改变代码的形成方式来做到这一点:

listaCompras = treeDoc.xpath("//compra")
for elem in listaCompras:
    for n in range(4):
        data = elem.xpath("//compra/@data_de_compra")
        coid = elem.xpath("//compra/@coid")
compra = [0, 0, 0, 0]        
for g in range(4):
    dataParsed = [g]
    dataParsed = datetime.strptime(data[g], "%Y/%m/%d")
    compra[g] = (dataParsed.year, coid[g])
print(compra)

def compraPorAno(ano):
    for (a, b) in compra:
        if ano == a:
            print("ID: ", b)

print(compraPorAno(2017))

如果给出购买的年份,此代码会给出购买 ID。

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2021-02-23
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多