У меня более миллиона текстовых файлов, сжатых в 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, а затем перевести регулярное выражение в код Хаффмана? Может ли это быть более эффективным, чем сначала распаковывать данные, а затем запускать регулярное выражение?
(Примечание: я знаю, что все будет не так просто: вам также придется иметь дело с другими аспектами ZIP-кодирования - разметкой файлов, блочной структурой, обратными ссылками - но можно предположить, что это может быть довольно легко.)
РЕДАКТИРОВАТЬ: Также обратите внимание, что, вероятно, гораздо разумнее просто использовать zipfile
решение.