【问题标题】:Errno 36: File name too long error parsing python XMLErrno 36:解析python XML时文件名太长错误
【发布时间】:2020-07-05 16:00:06
【问题描述】:

我有一个 XML 文件,我正在尝试解析和访问一个根:DonorAdvisedFundInd,我不应该对此有任何问题,但是当我尝试解析 XML 文件时,我收到一条错误消息:

[Errno 36] 文件名太长:`

这是我目前正在使用的代码:我剪掉了大部分代码,以便更容易看到问题所在。解析行发生错误。

import pandas as pd
import xml.etree.ElementTree as et
import requests
 
xml_data = requests.get("https://s3.amazonaws.com/irs-form-990/201903199349320465_public.xml").content
xtree = et.parse(xml_data)

现在我很困惑的原因是,如果你打开那个链接,XML 文件实际上并没有那么长。应该是可以解析的。如果有什么不同,我正在使用 IBM Watson Studio 的在线编译器。

如果有人能提供任何见解或反馈,我将不胜感激。

【问题讨论】:

    标签: python xml pandas elementtree


    【解决方案1】:

    试试fromstring:

    import pandas as pd
    import xml.etree.ElementTree as et
    import requests
     
    xml_data = requests.get("https://s3.amazonaws.com/irs-form-990/201903199349320465_public.xml").content
    xtree = et.fromstring(xml_data)
    

    更新 (用于查找特定元素)

    for i in xtree.findall(".//"):
        if 'DonorAdvisedFundInd' in i.tag:
            print(i.tag, i.attrib, i.text)
    

    另一种方法是像这样使用xmltodict lib:

    result = xmltodict.parse(xml_data)
    result['Return']['ReturnData']['IRS990']['DonorAdvisedFundInd']
    

    【讨论】:

    • 这不会返回错误,但输出如下:<Element '{http://www.irs.gov/efile}Return' at 0x7f68e94ab318> 我现在如何访问其中的一个元素?因为当我尝试 getroot() 时收到错误消息
    • for child in xtree: print(child.tag, child.attrib)
    • 这仅返回以下内容:{http://www.irs.gov/efile}ReturnHeader {'binaryAttachmentCnt': '0'} {http://www.irs.gov/efile}ReturnData {'documentCnt': '4'} 如果它更容易,我正在尝试访问 的值。非常感谢您的帮助,我真的很感激。
    • 这看起来很棒!非常感谢!我有一个问题。因此,我将您的代码的第一个版本与 for 循环一起使用,这是我的输出:{http://www.irs.gov/efile}DonorAdvisedFundInd {'referenceDocumentId': 'RetDoc1040000001'} 所以它肯定是在访问该文件。但是它不会返回 0 值,这是我真正想要的。我怎样才能让它退回这个?因为我将分析数百万个文档,其中一些为 0,一些为 1。
    • 使用这个print(i.tag, i.attrib, i.text)
    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多