2011-04-05 4 views
1

Je dois exécuter une correspondance regex sur un fichier, mais je suis confronté à un problème inattendu: le fichier est trop gros pour read() ou mmap() en un seul appel, les objets Fichier ne supportent pas l'interface buffer(), et le module regex prend seulement des chaînes ou des tampons.Python: regex sur un gros fichier. Moyen facile?

Y at-il un moyen facile de faire cela?

+0

Quelle est la taille de votre fichier? –

+1

Est-ce que l'expression régulière doit correspondre à plusieurs lignes, ou pouvez-vous faire l'équivalent de grep? – geoffspear

+0

Grand. Il devrait correspondre à plusieurs lignes. Je prends une approche différente maintenant (pas une situation de vie ou de mort), mais je me demandais, est-ce qu'il n'y a pas une manière plus simple de faire ceci? – slezica

Répondre

5

Le module Python mmap fournit un moyen convivial de mappage de mémoire Python pour un fichier. Sur un système d'exploitation 32 bits, la taille maximale du fichier sera limitée à un Go ou peut-être deux, mais sur un système d'exploitation 64 bits, vous pourrez mapper un fichier de taille arbitraire (jusqu'au stockage les tailles dépassent 2 , bien sûr).

Je l'ai fait avec des fichiers allant jusqu'à 30 Go (le fichier de vidage XML Wikipedia) en Python avec d'excellents résultats.

Questions connexes