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?

Foi útil?

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.

Módulo zipfile Python

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top