Есть ли в zip-файлах модуль python для сопоставления регулярных выражений

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

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

18.08.2008 07:41:09
4 ОТВЕТА
РЕШЕНИЕ

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

Тем не менее, есть модуль 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
9
3.09.2008 14:23:56

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

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

0
18.08.2008 08:06:30

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

Модуль Python Zipfile

0
18.08.2008 08:10:57

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

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

РЕДАКТИРОВАТЬ: Также обратите внимание, что, вероятно, гораздо разумнее просто использовать zipfileрешение.

0
3.09.2008 14:42:10
Точно нет. Zip-файлы хранятся не с кодированием Хаффмана, а со словарным кодированием. Кодирование символов зависит от кодирования других символов и их частоты в источнике. Так что у этой техники нет никаких шансов на работу.
Eli Bendersky 27.01.2009 14:06:30
Элибен, я не вижу никаких доказательств невозможности в твоих комментариях. Возможно, этот запас слишком узок, чтобы его содержать?
Chris Conway 27.01.2009 15:40:54