Existe-t-il un module python pour la correspondance des expressions régulières dans les fichiers zip
-
08-06-2019 - |
Question
J'ai plus d'un million de fichiers texte compressés dans 40 fichiers zip.J'ai également une liste d'environ 500 noms de modèles de téléphones.Je souhaite connaître le nombre de fois qu'un modèle particulier a été mentionné dans les fichiers texte.
Existe-t-il un module Python capable de faire une correspondance d'expression régulière sur les fichiers sans le décompresser.Existe-t-il un moyen simple de résoudre ce problème sans décompresser ?
La solution
Rien ne fera automatiquement ce que vous voulez.
Cependant, il existe un module python zipfile qui facilitera cette tâche.Voici comment parcourir les lignes du fichier.
#!/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
Autres conseils
Vous pouvez parcourir les fichiers zip, lire des fichiers individuels à l'aide du module zipfile et exécuter votre regex sur ceux-ci, éliminant ainsi la décompression de tous les fichiers en même temps.
Je suis presque certain que vous ne pouvez pas exécuter une expression régulière sur les données compressées, du moins pas de manière significative.
Pour accéder au contenu d'un fichier zip, vous devez le décompresser, bien que le package zipfile rende cela assez simple, car vous pouvez décompresser chaque fichier d'une archive individuellement.
N'est-il pas (au moins théoriquement) possible de lire le codage Huffman du ZIP puis de traduire l'expression rationnelle en code Huffman ?Cela pourrait-il être plus efficace que de décompresser d'abord les données, puis d'exécuter l'expression rationnelle ?
(Note:Je sais que ce ne serait pas si simple :vous devrez également gérer d'autres aspects du codage ZIP (disposition des fichiers, structures de blocs, références arrière) mais on imagine que cela pourrait être assez léger.)
MODIFIER:Notez également qu'il est probablement beaucoup plus judicieux d'utiliser simplement le zipfile
solution.