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