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 :

278 fichiers à ouvrir :(


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9
    Par défaut 278 fichiers à ouvrir :(
    Bonjour,

    Je dois analyser un corpus avec Python mais j'ai un souci dès le départ. Les données du corpus se trouvent dans plusieurs fichiers. Il faudrait donc que j'ouvre tous les fichiers en même temps. Mais avec "open()", on ne peut en ouvrir qu'un à la fois (et je dois en ouvrir 278!). Que faire?
    (J'ai aussi une liste (en .txt) des noms de tous les fichiers, ça peut peut-être servir)

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Il faudrait donc que j'ouvre tous les fichiers en même temps
    Pourquoi?

    Mais avec "open()", on ne peut en ouvrir qu'un à la fois (et je dois en ouvrir 278!)
    N'ayant pas fait de cours informatique, tout ce qui touche à la mémoire j'y connais pas grand chose, mais 278 tâche en même temps, va pas y avoir un soucis de RAM quelquepart?

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Tout dépend de la taille du buffer, et les mémoires actuelles sont importantes: il faut essayer!

    Je n'ai pas testé, mais on pourrait faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    F = [None]*278
     
    for i in range(len(F)):
        F[i] = open(NF[i], "r")
        ...
        ...
    ...
     
    for i in range(len(F)):
        F[i].close()
    Le nom du fichier à ouvrir NF[i] devant, lui aussi, être pris dans la liste NF des 278 noms de fichier à ouvrir.

    Mais bon. Peut-être faudrait-il vérifier avant que ces ouvertures multiples sont bien nécessaires!

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par fred1599 Voir le message
    278 tâche en même temps, va pas y avoir un soucis de RAM quelque part?
    Ouvrir un fichier ne crée pas une tâche mais un objet. Pour lire le fichier, on appelle un méthode de l'objet, ce qui peut très bien être fait par la tâche principale. Je pense comme Tyrtamos qu'il n'y a aucun problème de mémoire avec les machines actuelles. Mais la question principale est toujours là: Est ce bien nécessaire de les ouvrir tous en même temps?

    A+

    Pfeuh

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Finalement, ce n'est pas la mémoire sous Python qui coince, mais l'OS: le nombre de descripteurs de fichiers, donc de fichiers ouverts en même temps, a un maxi. Sous Windows, c'est 512 (http://msdn.microsoft.com/en-us/libr...VS.100%29.aspx).

    J'ai essayé: j'arrive à ouvrir 509 fichiers en même temps sans erreur. Mais à 510, j'ai l'exception: "IOError: [Errno 24] Too many open files". La différence entre 512 et 509 est probablement dûe à stdin, stdout et stderr.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Je dois analyser un corpus avec Python mais j'ai un souci dès le départ. Les données du corpus se trouvent dans plusieurs fichiers. Il faudrait donc que j'ouvre tous les fichiers en même temps. Mais avec "open()", on ne peut en ouvrir qu'un à la fois (et je dois en ouvrir 278!).
    La programmation est essentiellement l'organisation d'activités séquentielles et le parallélisme des traitements s'obtient avec des "organisations" particulières mais sont souvent "illusion" - pas toujours.

    Mais il faut "décomposer"...
    Une fois le fichier "ouvert" (1), il faudra lire (2) et "organiser" (3) les données qu'il contient pour les analyser(4). Littéralement mettre en forme une variante d'"informatique".

    Nous avons une séquentialité horizontale des traitements (1)=>(2)=>(3)=>(4).

    Il est possible que vous ne puissiez effectuer (4) qu'après avoir lu l'ensemble des fichiers. i.e devoir effectuer N fois la séquence (1)=>(2)=>(3) avant de pouvoir commencer (4). N*((1)=>(2)=>(3)) => (4)

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

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Par défaut
    hello,

    je t'ai fait un script python qui fait ce dont tu as besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import sys,os
     
    def merge_files(path,outpath):	
    	c = open(path+outpath,'w')
    	for f in os.listdir(path):
    		t = open(path + f)
    		c.write(t.read())
    		t.close()
    	c.close()
     
    try:
    	path = sys.argv[1]
    	outpath = sys.argv[2]
    	merge_files(path,outpath)
    except:
    	print 'error with input directory'
    	#the path must be of the following form: c:\path\to\files\
    tu le lances avec :
    python c:\chemin\vers\les\fichiers\ nom_de_sortie.txt
    (ne pas oublier d'ajouter le \ de fin)
    le nom de sortie permet de produire un fichier mergé avec les 278 autres dans le répertoire où ils se trouvent. si il y a d'autres fichiers que les 278 ils seront mergé aussi, alors attention...

    PS : pour utiliser la commande python sous windows, il faut faire comme je l'indique ici : lien (en bas)

  8. #8
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Raoul Volfoni, alias Bernard Blier, dans "Les Tontons Flingueurs" : Faut r'connaître... c'est du brutal !

    Ah ben oui ! Résoudre l'utilisation simultanée (à voir) de 278 fichiers en créant un monstre qui serait la juxtaposition des dits 278 fichiers, c'est, effectivement, du brutal ! Ca part surement d'un bon sentiment, mais ...

    Déjà, un "corpus" ça a l'air d'être assez spécial (j'aimerais bien en voir un "en vrai", je n'arrive pas à imaginer à quoi ça ressemble, malgré les infos Wikipedia), mais si quelqu'un a organisé (enfin j'espère) les informations en plusieurs fichiers, ce n'est certainement pas pour, au final, tous les mettre à la queue-leu-leu dans un même et gros "machin".

    En procédant de la sorte, on oublie que :

    • des fichiers peuvent avoir des types différents (texte, XML, binaire, que sais-je, ...),
    • qu'on a pu les organiser en une arborescence et pas, forcément, dans le même répertoire,
    • l'organisation d'un fichier (offsets, taille des champs, ...) est donnée au sein d'un même fichier, sans avoir à se préoccuper de là où il se trouve,
    • à compléter ...


    Donc, je n'ai pas de solution (d'ailleurs user_azerty, tu es assez avare en renseignements qui pourraient nous aider à ... t'aider) mais la dernière solution proposée n'est franchement pas à suivre !

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 140
    Par défaut Ah bon?
    Citation Envoyé par plxpy Voir le message
    Donc, je n'ai pas de solution (d'ailleurs user_azerty, tu es assez avare en renseignements qui pourraient nous aider à ... t'aider) mais la dernière solution proposée n'est franchement pas à suivre !
    Si tu parles de mon code, je ne vois pas en quoi il est a jeter, j'ouvre tous les fichiers , je les merge et je les ferme ensuite. il y a au maximum deux fichiers d'ouvert en simultané, donc pas d'inquiétudes

    Sinon, le corpus c'est un texte a analyser, je suppose que les données sont de même type.
    De toutes facon peu importe étant donné que user_azerty voulais merger des fichier, point barre./

  10. #10
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    wikipedia : "Un corpus est un ensemble de documents, artistiques ou non (textes, images, vidéos, etc.), regroupés dans une optique précise. On peut utiliser des corpus dans plusieurs domaines : études littéraires, linguistiques, scientifiques, etc."

    Je persiste à dire qu'agglomérer tout ça brutalement n'est pas une bonne idée et que le résultat est ingérable : on passe de données structurées - enfin, je pense - à un gros paquets d'octets.

    De toutes facon peu importe étant donné que user_azerty voulais merger des fichier
    A aucun moment il n'a dit ça !

  11. #11
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par utopman Voir le message
    j'ouvre tous les fichiers , je les merge et je les ferme ensuite. il y a au maximum deux fichiers d'ouvert en simultané
    Citation Envoyé par utopman Voir le message
    je dois en ouvrir 278!
    Tu avoueras quand même qu'on peut se poser des questions...

  12. #12
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    si c'est vrai : "en simultané"

    Celui créé est ouvert de bout en bout, un seul est ouvert en lecture à un moment donné.

    Par contre, ouvrir en écriture le fichier résultat dans le répertoire à traiter (ligne 4) puis traiter l'ensemble des fichiers qui sont dans ce répertoire (ligne suivante, no 5) va poser quelques problèmes ... ça se mord la queue ! Qu'est-ce qui se passera quand ça ouvrira le fichier résultat en lecture pour réécrire son contenu dans ... lui-même ?

Discussions similaires

  1. Quel fichier ouvrir, après...?
    Par jockyboss777 dans le forum VB.NET
    Réponses: 5
    Dernier message: 13/07/2007, 22h35
  2. Fonction sur fichier Ouvrir
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 08/06/2007, 10h04
  3. Option des fichiers "ouvrir avec" en C++
    Par al1EnC dans le forum Windows
    Réponses: 2
    Dernier message: 28/02/2007, 11h03
  4. [Fichier]ouvrir un fichier owl en java
    Par JavaNulles dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/08/2006, 09h26
  5. Fichiers : ouvrir en "append"
    Par casafa dans le forum Langage
    Réponses: 2
    Dernier message: 30/04/2006, 13h37

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