gpt4 book ai didi

python-3.x - Python 中的大型 XML 文件解析

转载 作者:行者123 更新时间:2023-12-04 01:21:35 25 4
gpt4 key购买 nike

我有一个大小为 4 GB 的 XML 文件。我想解析它并将其转换为数据帧以进行处理。但是由于文件太大,以下代码无法将文件转换为 Pandas Data Frame。代码只是不断加载,不提供任何输出。但是当我将它用于较小尺寸的类似文件时,我获得了正确的输出。
任何人都可以对此提出任何解决方案。也许是一段代码,可以加快从 XML 到数据帧的转换过程,或者将 XML 文件拆分为更小的子集。
任何建议我应该在我的个人系统(2 GB RAM)上使用如此大的 XML 文件还是应该使用 Google Colab。如果使用 Google Colab,那么有什么方法可以更快地将如此大的文件上传到 Colab?
以下是我使用过的代码:

import xml.etree.ElementTree as ET
tree = ET.parse("Badges.xml")
root = tree.getroot()

#Column names for DataFrame
columns = ['row Id',"UserId",'Name','Date','Class','TagBased']

#Creating DataFrame
df = pd.DataFrame(columns = columns)

#Converting XML Tree to a Pandas DataFrame

for node in root:

row_Id = node.attrib.get("Id")
UserId = node.attrib.get("UserId")
Name = node.attrib.get("Name")
Date = node.attrib.get("Date")
Class = node.attrib.get("Class")
TagBased = node.attrib.get("TagBased")

df = df.append(pd.Series([row_Id,UserId,Name,Date,Class,TagBased], index = columns), ignore_index = True)
以下是我的 XML 文件:
<badges>
<row Id="82946" UserId="3718" Name="Teacher" Date="2008-09-15T08:55:03.923" Class="3" TagBased="False" />
<row Id="82947" UserId="994" Name="Teacher" Date="2008-09-15T08:55:03.957" Class="3" TagBased="False" />
<row Id="82949" UserId="3893" Name="Teacher" Date="2008-09-15T08:55:03.957" Class="3" TagBased="False" />
<row Id="82950" UserId="4591" Name="Teacher" Date="2008-09-15T08:55:03.957" Class="3" TagBased="False" />
<row Id="82951" UserId="5196" Name="Teacher" Date="2008-09-15T08:55:03.957" Class="3" TagBased="False" />
<row Id="82952" UserId="2635" Name="Teacher" Date="2008-09-15T08:55:03.957" Class="3" TagBased="False" />
<row Id="82953" UserId="1113" Name="Teacher" Date="2008-09-15T08:55:03.957" Class="3" TagBased="False" />

最佳答案

考虑使用 iterparse 进行快速流处理,以增量方式构建树。在每次迭代中构建一个字典列表,然后您可以将其传递到 pandas.DataFrame 构造函数 一次 外部循环。在下面调整为根子节点的重复节点的名称:

from xml.etree.ElementTree import iterparse
#from cElementTree import iterparse
import pandas as pd

file_path = r"/path/to/Input.xml"
dict_list = []

for _, elem in iterparse(file_path, events=("end",)):
if elem.tag == "row":
dict_list.append({'rowId': elem.attrib['Id'],
'UserId': elem.attrib['UserId'],
'Name': elem.attrib['Name'],
'Date': elem.attrib['Date'],
'Class': elem.attrib['Class'],
'TagBased': elem.attrib['TagBased']})

# dict_list.append(elem.attrib) # ALTERNATIVELY, PARSE ALL ATTRIBUTES

elem.clear()

df = pd.DataFrame(dict_list)

关于python-3.x - Python 中的大型 XML 文件解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62578671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com