Comment accéder efficacement à une ligne spécifique dans des fichiers texte volumineux ?

DDD
Libérer: 2024-10-31 09:49:29
original
949 Les gens l'ont consulté

How to Efficiently Jump to a Specific Line in Large Text Files?

Sauter efficace vers une ligne spécifique dans des fichiers texte volumineux

Lors du traitement de fichiers texte volumineux avec des longueurs de ligne inconnues, passer à une ligne particulière sans parcourir l’intégralité du fichier peut améliorer considérablement l’efficacité. L'approche courante mise en évidence dans la question est itérative, mais ce n'est pas la solution la plus optimale.

Une alternative plus élégante et plus efficace consiste à identifier le décalage d'octet de départ de chaque ligne lors d'une passe de prétraitement. Cela peut être accompli en créant une liste de décalages comme suit :

<code class="python">line_offset = []
offset = 0
for line in file:
    line_offset.append(offset)
    offset += len(line)</code>
Copier après la connexion

Une fois cette liste prétraitée construite, passer à une ligne spécifique devient trivial :

<code class="python">file.seek(line_offset[n])</code>
Copier après la connexion

où n est le index de la ligne souhaitée (la première ligne étant la ligne 0). Cette technique permet une navigation directe vers n'importe quelle ligne sans analyser l'intégralité du fichier, ce qui réduit considérablement le temps de traitement pour les grands ensembles de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal