如何访问 zip 中的 XML

How to access an XML within a zip

我有以下结构:folder/some_files.zip/files.xml

我可以通过以下方式从 XML 中检索我想要的信息。这适用于普通文件夹,但我无法使其适用于 Zip 文件。

tree = ET.parse('filename.xml')
root = tree.getroot()
return root.find('.//Cloud_Coverage_Assessment').text

我怎样才能使它适用于多个 zip?这是我当前的代码:

def RetrieveCloudCover(filename, root):
    for zip in folder:  
        unzipped_file = zipfile.ZipFile(filename, "r")
        tree = ET.parse(unzipped_file)
        root = tree.getroot()
        return root.find('.//Cloud_Coverage_Assessment').text

现在我得到错误:

FileNotFoundError: [Errno 2] 没有那个文件或目录: 'filename'

您在函数中混合了很多不同的东西。 zip 文件不是您可以以“正常”方式查看的文件夹,尽管它在 OS 资源管理器中看起来像这样。

因此您需要将 zip 文件解压缩到一个文件夹中,然后遍历 XML 文件。像这样:

import zipfile
import glob
import os

zip_filename = "lvis_v1_train.json.zip"
unzip_folder = "unzipped_files"
# Open the zip file and extract the XML file to the "unzip_folder"
with zipfile.ZipFile(zip_filename) as zip_file:
    zip_file.extractall(unzip_folder)

# Get the list of XML files that were in your zip file
list_xml_files = glob.glob(os.path.join(unzip_folder, "*.json"))
# Iterate through the list of XML paths and open them.
for xml_file in list_xml_files:
    tree = ET.parse('filename.xml')
    # do what you need with xml files