La première chose que vous devriez penser face à un problème comme celui-ci,. readlines()
fera cela, de sorte que la méthode spécifique devrait être évitée.
Heureusement, nous avons une excellente bibliothèque standard en Python, itertools
. itertools
a beaucoup de fonctions utiles, et l'un d'eux est islice
. islice
itère sur un iterable (telles que des listes, des générateurs, objets de fichier de type etc.) et renvoie un générateur contenant la gamme spécifiée:
itertools.islice(iterable, start, stop[, step])
Faire un itérateur qui retourne des éléments sélectionnés de la itérable. Si start est différent de zéro, , les éléments de l'itérable sont ignorés jusqu'à ce que le début soit atteint. Par la suite, les éléments sont renvoyés consécutivement, sauf si l'étape est supérieure à celle qui entraîne l'omission d'éléments. Si l'arrêt est Aucun, alors l'itération se poursuit jusqu'à ce que l'itérateur soit épuisé, voire pas du tout; sinon, il s'arrête à la position spécifiée.Contrairement au découpage régulier, islice() ne prend pas en charge les valeurs négatives pour le démarrage, l'arrêt ou l'étape. Peut être utilisé pour extraire les champs connexes à partir des données où la structure interne a été aplaties (par exemple, un rapport sur plusieurs lignes peut liste un champ de nom sur chaque troisième ligne)
En utilisant cette information, avec la méthode str.join, vous pouvez par exemple extrait les lignes 10-19 en utilisant ce code simple:
from itertools import islice
# Add the 'wb' flag if you use Windows
with open('huge_data_file.txt', 'wb') as data_file:
txt = '\n'.join(islice(data_file, 10, 20))
Notez que lors de la boucle sur l'objet de fichier, la nouvelle ligne omble chevalier est dépouillé des lignes, de sorte que vous devez définir \ n que la jonction omble chevalier.
Il devrait être out1.write (''. Join (lignes [5:67])) et même pour out2 car readlines ne supprime pas la fin des lignes –
@Xavier oops, fixed – Bob
Ceci ne devrait pas être la réponse acceptée - vous ne lisez pas seulement 8 Go en mémoire, sauf si vous avez une très bonne raison de le faire. –