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






Вы можете циклически просматривать zip-файлы, читать отдельные файлы с помощью модуля zipfile и запускать на них свое регулярное выражение, избавляясь от необходимости распаковывать все файлы сразу.
Я почти уверен, что вы не можете запускать регулярное выражение для заархивированных данных, по крайней мере, бессмысленно.
Чтобы получить доступ к содержимому zip-файла, вы должны распаковать его, хотя пакет zipfile делает это довольно легко, поскольку вы можете распаковать каждый файл в архиве индивидуально.
Нет ничего, что автоматически делало бы то, что вы хотите.
Однако есть модуль 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
Разве невозможно (по крайней мере теоретически) прочитать код Хаффмана ZIP, а затем преобразовать регулярное выражение в код Хаффмана? Может ли это быть более эффективным, чем сначала распаковать данные, а затем запустить регулярное выражение?
(Примечание: я знаю, что все будет не так просто: вам также придется иметь дело с другими аспектами кодирования ZIP - разметкой файлов, блочными структурами, обратными ссылками - но можно представить, что это может быть довольно легко.)
Обновлено: Также обратите внимание, что, вероятно, гораздо разумнее просто использовать решение zipfile.
eliben, я не вижу никаких доказательств невозможности в вашем комментарии. Возможно, это поле слишком узкое, чтобы его вместить?
Точно нет. Zip-файлы хранятся не в кодировке Хаффмана, а в кодировке на основе словаря. Кодирование символов зависит от кодирования других символов и их частоты в источнике. Так что у этой техники вообще нет шансов сработать.