Forum Programmation.python Fichiers textes et binaires

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
6
mai
2016

Bonjour,

je suis totalement débutant en Python et je commence à manipuler les fichiers.
Je n'ai pas de pb pour créer, lire, enregistrer dans un fichier texte ou binaire mais je n'arrive pas à modifier et ou supprimer un enregistrement dans un fichier.
Pouvez vous m'aider ?

  • # seek

    Posté par  . Évalué à 2.

    Malheureusement ce n'est pas si simple. Quand tu ouvres un fichier, tu ne peux faire que ces opérations :
    - lire où se trouve le curseur (read)
    - écrire où se trouve le curseur (write)
    - déplacer le curseur (seek)

    Si tu veux supprimer un enregistrement dans ton fichier, tu dois déplacer la fin du fichier pour qu'elle recouvre l'enregistrement supprimé, en utilisant les fonctions ci-dessus (read, write, seek). Pas simple, mais faisable.

    Tu peux aussi créer un nouveau fichier, en recopiant le début et la fin, en omettant l'enregistrement à supprimer.

    Au lieu d'utiliser un fichier, tu peux utiliser aussi une base de données (par exemple sqlite) qui te permettra de gérer facilement des "enregistrements", de les modifier, de les supprimer, de les ordonner, et de sauvegarder tout ça.

    Il y a donc de nombreuses façon de faire, il faut choisir la meilleure en fonction de ce que représentent tes enregistrements.

    • [^] # Re: seek

      Posté par  . Évalué à 1.

      Merci pour la réponse.

      Ainsi pour modifier un enregistrement il faudrait que je crée un nouvel enregistrement avec les données modifiées et que je supprime l'enregistrement d'origine….
      Il n'y a donc pas de méthode directe ?

      • [^] # Re: seek

        Posté par  . Évalué à 1.

        pourrais-tu montrer un exemple de ce que tu veux faire ?

        • [^] # Re: seek

          Posté par  . Évalué à 1.

          Par exemple un petit fichier client dont chaque enregistrement serait une liste contenant le nom, le prénom, l'adresse (=> fichier en mode b).

          le jour ou le client déménage je dois pouvoir modifier l'adresse dans le fichier.

          Il me parait bien évident que passer par une base de donnée serait mille fois plus intéressant mais j'aime bien chercher la petite bête .

          Merci pour les réponses.

          • [^] # Re: seek

            Posté par  . Évalué à -1.

            Comme c'est un petit fichier, le plus simple est de le charger en mémoire, le modifier, et le réécrire en entier.

            Tu pourrais utiliser par exemple le format Comma-separated_values qui est très simple. Il existe sûrement une bibliothèque pour charger ce genre de fichier, mais tu peux aussi le faire à la main, en utilisant la fonction split de python.

            • [^] # Re: seek

              Posté par  . Évalué à 1.

              Merci pour les renseignements.
              Je vais essayer comme tu le conseilles (petit fichier en RAM et Base de données pour plus gros fichiers).

              A +

  • # paradigme

    Posté par  . Évalué à 4.

    Ton besoin est de créer, modifier, lire, détruire (CRUD) des informations.
    C'est la définition d'une base de données.
    Il y a mille solutions pour l'implémenter.
    Le choix dépend beaucoup de comment tu vas organiser tes données et des fonctionnalités que tu souhaites.

    Un système de fichiers est un moyen de stocker de l'information sous forme hiérarchique (un dossier contient des sous-dossiers et des fichiers, un sous-dossier est un dossier qui contient des sous-dossier et des fichiers, etc.).
    L'information se retrouve par le chemin. L'information élémentaire est un fichier. Par exemple un image.

    Par extension, un système de fichiers peut être une base de données clé-valeur. La clé est le chemin, la valeur le contenu du fichier. Par exemple, un fichier peut porter comme nom le nom du client et contenir les informations client (adresse, tel, etc.) dans un format quelconque (JSON, Pickle, MessagePack etc.). Tu peux en effet, créer, lire, modifier et supprimer un fichier. Mais il y a des limitation : un fichier fait au moins 4kB et stocker peu d'information dans chaque fichier conduit à de la perte d'espace. Le nombre de fichier dans un dossier est limité ou rend la consultation lente pour un grand nombre de fichiers (même si il y a des contournement). Et surtout, il n'est pas facile de retrouver rapidement une information (quel client a le numéro 0123456789 ?). Il faut alors indexer l'information avec un autre système (moteur de recherche).

    Un gros fichier seul n'est pas une base de données. Un CSV n'est pas une base de donnée car tu ne peux pas créer, lire, modifier, supprimer un enregistrement sans lire tout le fichier et ré-écrire tout le fichier. C'est un format d'échange de données (Export/Import).

    Un point important lorsque tu choisis un système de base de données est que le langage de programmation que tu utilises puisse y accéder. La grande majorité est compatible avec Python. Et d'ailleurs, je te recommande de commencer ici.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.