Itérer sur des enregistrements de taille fixe

Au lieu d’itérer sur un fichier par lignes, vous voulez itérer sur une collection d’enregistrements ou de morceaux de taille fixe.

Utilisez la fonction iter() et functools.partial() en utilisant ce code:

from functools import partial

RECORD_SIZE = 32

with open('somefile.data', 'rb') as f:
   records = iter(partial(f.read, RECORD_SIZE), b'')
   for r in records:
      ...

 

L’objet records dans cet exemple est un itérable qui produira des morceaux de taille fixe jusqu’à ce que la fin du fichier soit atteinte. Cependant, sachez que le dernier élément peut avoir moins d’octets que prévu si la taille du fichier n’est pas un multiple exact de la taille de l’enregistrement.

Une caractéristique peu connue de la fonction iter() est qu’elle peut créer un itérateur si vous lui passez une valeur appelable et une valeur sentinelle. L’itérateur résultant appelle simplement l’appelable fourni encore et encore jusqu’à ce qu’il renvoie la sentinelle, auquel point l’itération s’arrête.

Dans la solution, la méthode functools.partial est utilisée pour créer un objet appelable qui lit un nombre fixe d’octets d’un fichier chaque fois qu’il est appelé. La sentinelle b’ ‘ est ce qui est retourné quand un fichier est lu mais que la fin du fichier est atteinte.

Enfin, la solution montre le fichier ouvert en mode binaire. Pour la lecture d’enregistrements de taille fixe, ce serait probablement le cas le plus courant. Pour les fichiers texte, la lecture ligne par ligne (le comportement d’itération par défaut) est la plus fréquente.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here