python - 将 zip 解压缩到内存,解析内容

标签 python zip stringio

我想将 zip 文件的内容读入内存而不是将它们提取到光盘,在存档中找到特定文件,打开文件并从中提取一行。

是否可以打开并解析一个StringIO 实例?建议?提前致谢。

zfile = ZipFile('name.zip', 'r')

    for name in zfile.namelist():
        if fnmatch.fnmatch(name, '*_readme.xml'):
            name = StringIO.StringIO()
            print name # prints StringIO instances
            open(name, 'r')  # IO Error: No such file or directory...

我发现了一些类似的帖子,但似乎都没有解决这个问题:Extracting a zipfile to memory?

最佳答案

IMO 只使用 read 就足够了:

zfile = ZipFile('name.zip', 'r')
files = []
for name in zfile.namelist():
  if fnmatch.fnmatch(name, '*_readme.xml'):
    files.append(zfile.read(name))

这将生成一个包含与模式匹配的文件内容的列表。

测试: 然后您可以通过遍历列表来解析内容:

for file in files:
  print(file[0:min(35,len(file))].decode()) # "parsing"

或者更好地使用仿函数:

import zipfile as zip
import os
import fnmatch

zip_name = os.sys.argv[1]
zfile = zip.ZipFile(zip_name, 'r')

def parse(contents, member_name = ""):
  if len(member_name) > 0:
    print( "Parsed `{}`:".format(member_name) )  
  print(contents[0:min(35, len(contents))].decode()) # "parsing"

for name in zfile.namelist():
  if fnmatch.fnmatch(name, '*.cpp'):
    parse(zfile.read(name), name)

这样就没有数据无缘无故地保存在内存中,内存占用空间更小。如果文件很大,这可能很重要。

关于python - 将 zip 解压缩到内存,解析内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569659/

相关文章:

java - 是否可以从 zipinputstream 获取 zipentry 的输入流?

java - 如何使用 KSOAP2 从 Web 服务获取文件的一部分并创建 zip?

python - 在 DecisionTree 中使用 StringIO 的目的是什么

python - 提交表单后,如何在点击所述元素之前等待元素加载? ( Selenium / python )

python - 如何使用 Rasterio 更改 Raster 的 dtype

python - 如何在 ListView 中设置选择?

Python 从字典中删除特定值

java - 使用 Java 获取 ZIP 文件中目录的内容

Python,在内存中写入zip到文件

encoding - python3中的io.StringIO编码