Skip to main content
 首页 » 编程设计

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

2025年05月04日17Free-Thinker

我想将 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) 

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