Sx XML 解析 Pandas

S3 to XML Parse to Pandas

我在 S3 中有许多 XML 文件,我正试图将它们放入 pandas 并从那里转移到 MSSQL。在此示例中,我使用 etree 来解析文件,但老实说,我不关心它是 LMXML 还是任何其他包。但是,我认为实际上没有从文件中读取任何内容。以下是我的代码和错误。我觉得我很亲近,但是,我很可能不是!干杯

代码

    import boto3
from pprint import pprint
import lxml
from lxml import etree
import xml.etree.ElementTree as et 
import pandas as pd

client = boto3.client('s3')
paginator = client.get_paginator('list_objects_v2')
result = paginator.paginate(
    Bucket='MYBUCKET',
    Prefix='FOLDER/FOLDER2/')

bucket_object_list = []

for page in result:
    pprint(page)
    if "Contents" in page:
        for key in page["Contents"]:
            keyString = key["Key"]
            pprint(keyString)
            bucket_object_list.append(keyString)

s3 = boto3.resource('s3')

for file_name in bucket_object_list:
    obj = s3.Object('MYBUCKET', file_name)
    print(obj.get())
    xmldata = obj.get()["Body"].read().decode('utf-8')

parsed_xml = et.parse(xmldata)
dfcols = ['col1','col2', 'col3']
df_xml = pd.DataFrame(columns=dfcols)

for node in parsed_xml.getroot():
    col1 = node.find('col1')
    col2 = node.find('col2')
    col3 = node.find('col3')
        df_xml = df_xml.append(
        pd.Series([getvalueofnode(col1), getvalueofnode(col2), getvalueofnode(col3)], index=dfcols),
        ignore_index=True)

print(df_xml)

错误

traceback (most recent call last):
  File "xmlnightmare.py", line 31, in <module>
    parsed_xml = et.parse(xmldata)
  File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1182, in parse
    tree.parse(source, parser)
  File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 647, in parse
    source = open(source, "rb")
IOError: [Errno 2] No such file or directory: u'<?xml version="1.0"?

..... IOError: [Errno 2] No such file or directory: u'

ElementTree.parse() 期望 XML 文档在参数中的位置。如果您有 XML 文档的内容,如上面的错误消息所示,您应该使用 ElementTree.fromstring() 代替:

....
parsed_xml = et.fromstring(xmldata)
dfcols = ['col1','col2', 'col3']
....