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 :

limite taille variable ?


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 21
    Points
    21
    Par défaut limite taille variable ?
    Bonjour,

    J'essaye d'ouvrir un fichier en python et j'ai une erreur du type :

    IOError: [errno 12] Not enough space

    Mon fichier fait plus de 100Mo.

    J'ai fait un test avec un fichier txt tout simple et ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os
     
    mon_fichier = open("D:/CDR SBC/test/detail-20110503_10", "r")
    #mon_fichier = open("D:/CDR SBC/code/fichier.txt", "r")
    contenu = mon_fichier.read()
    print(contenu)
    mon_fichier.close()
     
    os.system("pause")
    Vous pensez que le fichier est trop gros ? Sachant que je vais devoir en ouvrir plusieurs, et certains seront plus dodu que celui-la.

    merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    salut,

    sur windows en 32 bit (os + Python), je crois que la limitation mémoire est de 1.6-1.8 Go pour un process Python.

    dans ton exemple tu charges tout le fichier en mémoire, il va peut être falloir traiter le fichier ligne à ligne (ou bloc par bloc) si tu as des fichiers de plusieurs centaines de Mo

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Salut Kango,

    Merci pour ta réponse rapide.
    Comment tu fais pour lire le fichier ligne par ligne ou bloc par bloc ?
    Je débute en python et j'essaye de traduire un script que j'avais fait en php pour parser des données.
    L'objectif est de parser les données (avec des regex), récupérer les lignes qui m'intéresse et les stocker dans une base de données.

    En php j'ouvrais le fichier dans une var et je travaillais directement dessus avant de passer au fichier suivant.

    1.8Go ça devrait être largement suffisant en théorie pour un fichier..

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for line in open('toto.txt', 'r'):
       print line

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    et bloc par bloc ?

    merci encore

  6. #6
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Si par bloc tu entends un ensemble de lignes, if faudra le reconstituer à partir des lignes récupérées au fur et à mesure, définir quand un bloc s'ouvre, et quand il se ferme. Ce qui implique que le début et la fin d'un bloc possède chacun un signe distinctif.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Oui j'ai un début et une fin. Et en plus je sais que j'ai 138 lignes par bloc.
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fs = open("D:/CDR SBC/test/detail-20110503_10", "r")
    while 1:
            txt = fs.readline(138)
            if txt =="":
                break
    	print(txt)	
    fs.close()
    Mais ça bloque. Une idée pour ouvrir et faire des regex sur chaque bloc de données ?

  8. #8
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BLOC = BLOC_DATA = ''
    for line in open(monFichier):
        if not BLOC and re.match(line, debut_bloc_pattern):
            BLOC=True
            BLOC_DATA=line
        elif BLOC and re.match(line, fin_bloc_pattern):
            BLOC=False
            BLOC_DATA += line
        elif BLOC:
            BLOC_DATA += line
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BLOC = BLOC_DATA = ''
    for line in open(monFichier):
        if not BLOC and re.match(line, debut_bloc_pattern):
            BLOC=1
            BLOC_DATA=line
        elif BLOC >= 128:
            BLOC=0
            BLOC_DATA += line
        elif BLOC:
            BLOC_DATA += line
            BLOC += 1

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/02/2011, 10h13
  2. [HTML] Limiter taille ligne <textarea>
    Par hedgehog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/06/2005, 11h45
  3. Comment obtenir un tableau à taille variable ?
    Par marsupilami34 dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 15h03
  4. Réponses: 2
    Dernier message: 21/10/2004, 12h29
  5. Limiter taille fichier joint à un mail
    Par fdthierry dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 27/08/2004, 12h12

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