2008-08-18 11 views
4

У меня есть более миллиона текстовых файлов, сжатых в 40 ZIP-файлов. У меня также есть список из 500 имен моделей телефонов. Я хочу узнать количество случаев, когда конкретная модель упоминалась в текстовых файлах.Есть ли модуль python для сопоставления регулярных выражений в zip-файлах

Есть ли какой-либо модуль python, который может выполнять регулярное сравнение файлов без их разархивирования. Есть ли простой способ решить эту проблему без распаковки?

ответ

9

Там нет ничего, что будет автоматически делать то, что вы хотите.

Однако есть модуль zipfile для python, который сделает это простым в использовании. Вот как перебирать строки в файле.

#!/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 
0

Вы можете прокручивать zip-файлы, читая отдельные файлы с помощью zipfile-модуля и запуская регулярное выражение на них, устраняя возможность разархивировать все файлы одновременно.

Я уверен, что вы не можете запускать регулярное выражение по заархивированным данным, по крайней мере, не имеющим смысла.

0

Для доступа к содержимому zip-файла вам необходимо разархивировать его, хотя пакет zipfile делает это довольно простым, так как вы можете разархивировать каждый файл в архиве по отдельности.

Python zipfile module

0

Не правда ли (по крайней мере, теоретически) возможно, для чтения в кодировании Хаффмана почтового индекса, а затем перевести регулярное выражение в код Хаффмана? Может ли это быть более эффективным, чем сначала сжимать данные, а затем запускать регулярное выражение?

(Примечание: я знаю, что это будет не так просто: вам также придется иметь дело с другими аспектами кодирования ZIP — макета файла, структур блоков, обратных ссылок —, но можно представить, что это может быть справедливо легкий.)

EDIT: Также обратите внимание, что, вероятно, гораздо разумнее использовать решение zipfile.

+0

Абсолютно нет. Zip-файлы не сохраняются с кодировкой huffman, но со словарным кодированием. Кодирование символов зависит от кодировок других символов и их частоты в источнике. Таким образом, у этой техники нет никаких шансов на работу. – 2009-01-27 14:06:30