尝试运行简单的 ETL 代码时出现 AttributeError

如何解决尝试运行简单的 ETL 代码时出现 AttributeError

我已经阅读了大量其他线程,但找不到解决方案,因此请感谢任何人就如何解决此问题提供意见!

完成一个 Python 数据工程课程,这个项目是关于网络抓取的。尝试创建从 XML、CSV 和 JSON 文件提取数据的函数时,我收到下面的“AttributeError”。

AttributeError - 回溯(最近一次调用最后一次) 1 日志(“提取阶段开始”) ----> 2 提取数据 = 提取() 3 log("提取阶段结束") 4 提取数据

提取() 29 # 最后,处理所有xml文件 30 对于 glob.glob("*.xml") 中的 xmlFile: ---> 31提取的数据=提取的数据。附加(xmlExtract(xmlFile),ignore_index=True) 32 33 返回提取的数据

在 xmlExtract(xmlFile) 15 root = tree.getroot() 16 对于 root 的人: ---> 17 name = person.find("name").text 18 height = float(person.find("height").text) 19 weight = float(person.find("weight").text)

AttributeError: 'nonetype' 对象没有属性 'text'

这是错误所指的代码片段:

def xmlExtract(xmlFile):
    dframe = pddf(columns=["name","height","weight"])
    tree = ET.parse(xmlFile)
    root = tree.getroot()
    for person in root:
        name = person.find("name").text
        height = float(person.find("height").text)
        weight = float(person.find("weight").text)
        dframe = dframe.append({"name":name,"height":height,"weight":weight},ignore_index=True)
    return dframe

感谢任何关于从哪里开始的指示。

附言'pdf' 是从 pandas - from pandas import DataFrame as pddf 中独特导入的 pandas.dataframe - 因为我在使用 import pandas as pd 时遇到错误,然后使用 pd.dataframe。

解决方法

错误很明显:

AttributeError: 'NoneType' object has no attribute 'text'

一些对 .find 的调用返回 None。在调用 None 之前,您必须先检查值是否为 .text

def xmlExtract(xmlFile):
    dframe = pddf(columns=["name","height","weight"])
    tree = ET.parse(xmlFile)
    root = tree.getroot()
    for person in root:
        name = person.find("name").text if person.find("name") else None
        height = float(person.find("height").text) if person.find("height") else None
        weight = float(person.find("weight").text) if person.find("weight") else None

        dframe = dframe.append({"name": name,"height": height,"weight": weight},ignore_index=True)
    return dframe

这个代码不是最好的。这只是一个例子。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?