Existe um módulo python para correspondência de regex em arquivos zip
-
08-06-2019 - |
Pergunta
Tenho mais de um milhão de arquivos de texto compactados em 40 arquivos zip.Também tenho uma lista de cerca de 500 nomes de modelos de telefones.Quero descobrir quantas vezes um determinado modelo foi mencionado nos arquivos de texto.
Existe algum módulo python que possa fazer uma correspondência de regex nos arquivos sem descompactá-los.Existe uma maneira simples de resolver esse problema sem descompactar?
Solução
Não há nada que faça automaticamente o que você deseja.
No entanto, existe um módulo python zipfile que tornará isso fácil de fazer.Veja como iterar nas linhas do arquivo.
#!/usr/bin/python
import zipfile
f = zipfile.ZipFile('myfile.zip')
for subfile in f.namelist():
print subfile
data = f.read(subfile)
for line in data.split('\n'):
print line
Outras dicas
Você pode percorrer os arquivos zip, lendo arquivos individuais usando o módulo zipfile e executando seu regex neles, eliminando a necessidade de descompactar todos os arquivos de uma vez.
Tenho quase certeza de que você não pode executar uma regex nos dados compactados, pelo menos não de forma significativa.
Para acessar o conteúdo de um arquivo zip você precisa descompactá-lo, embora o pacote zipfile torne isso bastante fácil, pois você pode descompactar cada arquivo de um arquivo individualmente.
Não é (pelo menos teoricamente) possível ler a codificação Huffman do ZIP e depois traduzir o regexp para o código Huffman?Isso poderia ser mais eficiente do que primeiro descompactar os dados e depois executar o regexp?
(Observação:Eu sei que não seria tão simples:você também teria que lidar com outros aspectos da codificação ZIP – layout de arquivo, estruturas de bloco, referências anteriores – mas imaginamos que isso poderia ser bastante leve.)
EDITAR:Observe também que provavelmente é muito mais sensato usar apenas o zipfile
solução.