Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打开一个zip文件,并在zip文件中传输xml文件_Python_Xml_Zipfile - Fatal编程技术网

Python 打开一个zip文件,并在zip文件中传输xml文件

Python 打开一个zip文件,并在zip文件中传输xml文件,python,xml,zipfile,Python,Xml,Zipfile,我正在试着打开。ZIP中的xml文件是包含多个xml声明的串联xml文件,非常大。我试图只读取xml中的行,直到下一个xml声明。我找到了相关的问题,没有代码 我要创建的是一个函数,它执行以下操作: 对于每个*.zip文件 提取所有xml文件(或打开xml文件进行读取) 从xml文件中读取行 追加每一行直到下一个xml声明 返回字符串 到目前为止,我已经能够打开zip文件,找到所有xml文件并提取每个xml文件。我不希望将xml文件写入磁盘,而是创建一个字符串,该字符串是一个xml文档,然后进一

我正在试着打开。ZIP中的xml文件是包含多个xml声明的串联xml文件,非常大。我试图只读取xml中的行,直到下一个xml声明。我找到了相关的问题,没有代码

我要创建的是一个函数,它执行以下操作:

  • 对于每个*.zip文件
  • 提取所有xml文件(或打开xml文件进行读取)
  • 从xml文件中读取行
  • 追加每一行直到下一个xml声明
  • 返回字符串
  • 到目前为止,我已经能够打开zip文件,找到所有xml文件并提取每个xml文件。我不希望将xml文件写入磁盘,而是创建一个字符串,该字符串是一个xml文档,然后进一步解析

    def main():
    path = 'bulk/'
    allFiles = glob.glob(path + '*.zip')
    allFiles.sort()
    
    for file in allFiles:
        try:
            with zipfile.ZipFile(file, mode = 'r', allowZip64 = True) as fin:
                print(fin, '- ok')
                print(fin.namelist())
                for name in fin.namelist():
                    if name.endswith('xml'):
                        print(name) # all files that end in 'xml'
                        fin.extract(name, path='bulk/')
                        print('extracted ', name)
                        # TODO function to read lines of the xml file and
    
    
    
    
        except zipfile.BadZipFile:
                print(file,'- Bad zip file')
    
    if __name__ == '__main__': main()
    
    使用而不是
    提取
    。它返回给定名称的zip文件的字节数。重要的是要理解,您实际上是在将归档文件提取到内存中,因此要知道实际要提取多少数据,以及您在这方面的限制

    例如,以下函数返回一个dict,其中zip存档文件的名称为键,文件的内容为值:

    from zipfile import ZipFile
    
    def extract(f):
        zf = ZipFile(f)
        return {name: zf.read(name) for name in zf.namelist()}