Longueur d'un fichier

Utilisation du module pickle

Le problème exposé dans ce sujet a été résolu.

Bonsoir

J’ai besoin de lire un fichier binaire dont je ne connais pas la longueur. Le fichier a été créé avec le module pickle et on y a rangé plusieurs objets mais je ne sais pas combien. À la lecture, si j’essaie de lire plus d’objets qu’il n’y en a, j’obtiens une erreur.

Je peux résoudre le problème en faisant un try mais je me demandais s’il n’existait pas une façon plus propre de le faire, genre commencer par tester le nombre d’objets dans le fichier, par exemple.

Merci de votre aide.

Olivier

Salut,

Je ne vois pas ce qu’il y a de mal à utiliser un try. À propos des exceptions, je te conseille de lire cet article. Une citation intéressante :

En Python, la philosophie est “It’s easier to ask for forgiveness than permission” (EAFP). Soit “il est plus facile de demander pardon que la permission”.

Autre solution, ne stocker qu’un élément par fichier et boucler sur les fichiers.

Si tu dois stocker plusieurs objets, tu peux les coller dans une liste et dumper la liste.

nohar

Ce qui implique tout de même d’avoir tous les objets simultanément en mémoire.

Et je plussoie le propos de tleb : il n’est pas sale d’utiliser try pour cela.

Si ton fichier ne contient que les objets que tu veux récupérer, tu peux boucler tant que tu n’atteins pas la fin du fichier ? (End of File) Ou alors calculer la taille du fichier et diviser par la taille d’un objet pour en obtenir le nombre (je suppose que tes objets ont une taille fixe dans ton fichier).

En soit ta méthode n’est pas incorrecte, mais personnellement je procéderais ainsi.

+0 -0

Bonjour

Merci de votre aide.

Comme je n’ai pas une énorme quantité d’objets, je peux très bien tous les avoir en mémoire simultanément et du coup je vais passer par une liste que je vais dumper.

Mais pour ma culture, vous me confirmez qu’il n’existe pas de fonction capable de me dire combien d’objets contient mon fichier ? autre que ce que propose Renault qui implique de connaître la taille d’un objet et que tous les objets aient la même taille (ce qui n’est pas le cas).

Si tu dois stocker plusieurs objets, tu peux les coller dans une liste et dumper la liste.

nohar

Ce qui implique tout de même d’avoir tous les objets simultanément en mémoire.

entwanne

Certes, mais si tu dois stocker/charger plus d’objets que ta RAM ne peut contenir, m’est avis que c’est carrément l’utilisation de pickle qu’il faut remettre en question, en faveur d’une base de données résiliente et une stratégie de sérialisation digne de ce nom.

+4 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte