Le Moyen le plus rapide pour Supprimer une Ligne de Gros Fichier en Python

Je suis en train de travailler avec un très grand (~11 GO) fichier texte sur un système Linux. Je suis en cours d'exécution à travers un programme qui est en train de vérifier le fichier d'erreurs. Une fois qu'une erreur est trouvée, j'ai besoin de corriger la ligne ou de supprimer la ligne complètement. Et puis répétez...

Finalement, une fois que je suis à l'aise avec le processus, je vais automatiser entièrement. Pour l'instant cependant, supposons que je suis en cours d'exécution à la main.

Quelle serait la manière la plus rapide (en termes de temps d'exécution) pour supprimer une ligne de ce fichier volumineux? J'ai pensé à le faire en Python...mais d'être ouvert à d'autres exemples. La ligne peut être n'importe où dans le fichier.

Si Python, assumer l'interface suivante:

def removeLine(filename, lineno):

Merci,

-aj

  • L'utilisation de grep -v serait susceptible d'être plus rapide que l'utilisation de Python
  • Qui ligne avez-vous supprimer? Comment allez-vous être en mesure de l'identifier? La réponse à ce qui pourrait faire une grande différence à la stratégie.
  • Est une solution de script absolument nécessaire? Grande Visionneuse de Fichier Texte (swiftgear.com/ltfviewer/features.html) doit être capable de gérer le fichier et vous pouvez rechercher la bonne ligne à l'aide d'Expressions Régulières.
  • Un bon éditeur de texte (par exemple, gvim) ne devrait pas avoir beaucoup de problèmes avec un texte plus long fichier. 11 GO n'est pas rare...
  • Révisé la question de donner plus de détails sur l'exigence, merci.
  • quelle solution proposeriez-vous dans grep?
  • Byers - je obtenir le numéro de la ligne basé sur la sortie d'un autre programme. Il pourrait se produire n'importe où dans le fichier.
  • l'utilisation de Linux, révisé à ma question. Merci.
  • chat le fichier et le tuyau en à grep -v avec la chaîne de caractères / ligne que vous souhaitez ignorer cat fichier | grep -v "meh" > filteredFile Ici filteredFile ne comporte aucune ligne contenant "meh". Grep est généralement très efficace et donc peut vous donner beaucoup de l'amélioration de la performance sur une méthode similaire mis en œuvre en Python
  • merci, mais je ne suis pas de décider de la ligne à supprimer basée sur la correspondance d'un motif. je sais déjà exactement numéro de la ligne à supprimer.
  • AJ: sed est exactement ce dont vous avez besoin. Regardez les d de commande.
  • Le plus rapide serait de mettre à jour le fichier en place, en remplacement de la ligne avec un espace, est acceptable? puis mmap est le chemin à parcourir
  • Au lieu de répéter le processus, est-il possible de tout faire en une seule passe? Qui devrait être beaucoup plus efficace
  • Au lieu de supprimer la ligne, créer un nouveau fichier pour les numéros de ligne des lignes supprimées, et de stocker le numéro de la ligne dans ce fichier. La prochaine fois que vous lisez le fichier, prétendent que la ligne supprimée n'est pas là.

InformationsquelleAutor AJ. | 2010-02-24