IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Lire fichier en mémoire sans l'écrire sur le hdd


Sujet :

Python

  1. #1
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut Lire fichier en mémoire sans l'écrire sur le hdd
    Bonjour,

    Je souhaiterai pourvoir stocker des fichiers dans un fichier.
    Je note l'index des octets dans un fichier d'entête.
    Ensuite, je lis le fichier à l'aide de l'entête et j'envoie tout dans une variable.

    Si dans cette variable, j'ai le contenu d'un document, pdf ou doc.. ou autre.
    Comment le lire sans l'écrire sur le disque dur ?
    Le mieux serait de l'ouvrir avec le logiciel par défaut prévu dans le système hôte.

    Vers quels modules dois-je chercher ?
    merci.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Regarde déjà du côté des modules tarfile et StringIO.

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut
    Tarfile est intéressant si je veux stocker des informations dans un conteneur. Par contre, je ne trouve pas comment laisser ce conteneur en mémoire.

    Idem pour StringIO ou cStringIO, cela permet de créer des contenus de fichiers mais sans réellement les créer. Pour cela, il faut les enregistrer sur le disque dur.
    Sauf, si ces fichiers sont des images, mais ce n'est pas tout le temps le cas.

    Êtes-vous d'accord ?
    Avez-vous d'autres pistes ?

    Merci par avance.
    ar.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Salut,

    In fine, le contenu des fichiers devra être adressable via des variables qui pourront être des objets StringIO si on souhaite disposer de l'API "fichier".

    Quel est l'intérêt de les mettre dans un conteneur .ZIP ou .TAR si c'est pour le garder en mémoire: un dict pourrait suffire, non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Citation Envoyé par Fl0r3nt Voir le message
    Idem pour StringIO ou cStringIO, cela permet de créer des contenus de fichiers mais sans réellement les créer. Pour cela, il faut les enregistrer sur le disque dur.
    Voici une réponse sur le sujet (Sujet, origine)

    Citation Envoyé par wiztricks Voir le message
    Salut,
    Hmm plutôt que de passer par subprocess.stdout => StringIO => subprocess.stdin, pourquoi ne pas laisser le shell (bash) faire le pipe?
    - W
    PS: Quand c'est trop compliqué, il y a encore la ressource de passer par un ramdisk.
    Si vous avez la solution dans ce sens. Merci.

    Bon code
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    In fine, le contenu des fichiers devra être adressable via des variables qui pourront être des objets StringIO si on souhaite disposer de l'API "fichier".
    Oui, je pense pouvoir construire un fichier par le biais de variable, mais si je souhaite utiliser le fichier en tant que tel, il semble obligatoire de d'écrire celui-ci sur le disque dur. Tous les exemples trouvés sur Internet que j'ai essayé écrivent sur le disque dur et ne laisse pas le fichier en mémoire.

    Quel est l'intérêt de les mettre dans un conteneur .ZIP ou .TAR si c'est pour le garder en mémoire: un dict pourrait suffire, non?
    - W
    Il n'y a pas forcement d'intérêt, sauf celui de regrouper des fichiers.

    PauseKawa
    J'ai lu les posts indiqués et leurs conclusion. Par contre, les RAMDISK sont la plupart payant ou très ancien dans leur développement. La plupart du temps leurs codes source est fermés.
    Dans tous les cas, ce n'est pas une fonctionne native dans Python.

    Merci de votre aide.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    [QUOTE]Oui, je pense pouvoir construire un fichier par le biais de variable, mais si je souhaite utiliser le fichier en tant que tel, il semble obligatoire de d'écrire celui-ci sur le disque dur. Tous les exemples trouvés sur Internet que j'ai essayé écrivent sur le disque dur et ne laisse pas le fichier en mémoire./QUOTE]

    "En mémoire" correspond à la mémoire RAM allouée pendant la durée de vie d'un process - l'interpréteur Python qui exécute vos scripts - et elle est rendue à la fin du process - et les données qu'elle contient sont perdues.

    Si vous ne voulez pas passer par des fichiers disques, vous avez deux solutions (enfin au moins):
    - trouver un driver de RAMdisk pour votre OS qui permet d'allouer un chunk de mémoire physique utilisable comme un disque,
    - passer par mmap avec ou sans fichier de backing store, c'est une fonctionnalité de l'OS accessible depuis Python mais il vous faudra lire la doc OS pour l'utiliser proprement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut
    Par contre, je comprends que ce n'est pas portable (Windows / Linux).
    Mais comment, les développeurs de Truecrypt ont fait ;-)

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par Fl0r3nt Voir le message
    Par contre, je comprends que ce n'est pas portable (Windows / Linux).
    Mais comment, les développeurs de Truecrypt ont fait ;-)
    TrueCrypt est OpenSource, il vous suffit d'aller voir comment ils ont fait.
    Ceci dit, dès qu'on fait des trucs compliqués, performants et collé à l'OS, impossible de ne pas écrire des bouts de code "spécifiques" à chacun.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut

    "En mémoire" correspond à la mémoire RAM allouée pendant la durée de vie d'un process - l'interpréteur Python qui exécute vos scripts - et elle est rendue à la fin du process - et les données qu'elle contient sont perdues.

    Si vous ne voulez pas passer par des fichiers disques, vous avez deux solutions (enfin au moins):
    - trouver un driver de RAMdisk pour votre OS qui permet d'allouer un chunk de mémoire physique utilisable comme un disque,
    - passer par mmap avec ou sans fichier de backing store, c'est une fonctionnalité de l'OS accessible depuis Python mais il vous faudra lire la doc OS pour l'utiliser proprement.

    - W
    Je relisais votre réponse et quelques choses m'interpelle.
    'correspond à la mémoire RAM allouée pendant la durée de vie d'un process'
    Une commande python = un process ou un script entier = un process.

    Ce que je veux dire, c'est que le fichier est donc accessible par un autre programme tant que le script/commande n'est pas terminé(e) ?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par Fl0r3nt Voir le message
    Ce que je veux dire, c'est que le fichier est donc accessible par un autre programme tant que le script/commande n'est pas terminé(e) ?
    Pour des questions de sécurité, l'espace virtuel d'un process est, par défaut, "privé": impossible d'y accéder sans avoir définit les conditions.

    mmap est un moyen pour permettre à différents process de "partager" leur espace virtuel. Il est assez primitif pour faire ce qu'on veut... mais si c'est compliqué, il y a du boulot ;-(
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Lire et écrire sur les fichiers xls et xlsx avec POI
    Par LILIFA dans le forum Documents
    Réponses: 4
    Dernier message: 23/07/2013, 22h33
  2. Réponses: 1
    Dernier message: 29/04/2008, 23h53
  3. lire/écrire sur un fichier texte sur un serveur distant
    Par nabmoah dans le forum Visual C++
    Réponses: 6
    Dernier message: 12/02/2007, 10h27
  4. lire/écrire sur un port com sans le monopoliser
    Par totofweb dans le forum Windows
    Réponses: 4
    Dernier message: 26/07/2004, 13h23
  5. [OS] Lire et écrire sur disquette
    Par trax44 dans le forum Programmation d'OS
    Réponses: 17
    Dernier message: 22/02/2004, 20h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo