2017-05-17 2 views
0

J'ai besoin de parcourir plusieurs fois les lignes de quelques fichiers texte. Cela se fait actuellement avec plusieursPython fichier io tampon

with open("file.txt") as f: 
    for line in f: 
     # do something 

Bien que les performances ne sont pas un problème encore, je voudrais lire les fichiers une seule fois dans un tampon io.StringIO puis travailler avec cela.

python io documents:

C'est un groupe de travail snippet

import io 
sio = io.StringIO(open("file.txt").read()) 
for line in sio: 
    print(line) 
sio.seek(0) 
for line in sio: 
    print(line) 
sio.close() 

ou l'envelopper dans un communiqué withcontext manager

import io 
with io.StringIO(open("file.txt").read()) as sio: 
    for line in sio: 
     print(line) 
    sio.seek(0) 
    for line in sio: 
     print(line) 
    #sio.close() 

Questions

  1. Est-ce une "bonne" façon de le faire, quelles sont les alternatives?
  2. Qu'arrive-t-il à l'objet fichier utilisé pour lire le fichier (il n'y a aucun moyen de le faire explicitement close() de cette façon)?
  3. Où puis-je en savoir plus sur la mise en mémoire tampon io de Python (je pense avoir lu quelque chose à propos de Python optimisant plusieurs accès aux fichiers par mise en mémoire tampon automatique)?

Répondre

-1

Ce que vous faites est déjà la bonne façon. Je cite cette réponse: How to read large file, line by line in python

L'ouverture et poignées de déclaration with fermeture du dossier, y compris si une exception est levée dans le bloc intérieur. Le for line in f traite l'objet fichier f comme un élément itératif, qui utilise automatiquement la gestion des entrées-sorties et de la mémoire tampon afin que vous n'ayez pas à vous soucier des fichiers volumineux.

+0

Oui, mais mes questions concernent le traitement d'un fichier _multiple_ fois. Devrait-il être 'open()' ed plusieurs fois? De plus, il n'y a pas de références sur la mise en mémoire tampon. – handle