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 :

Récupérer données dans fichier .txt


Sujet :

Python

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bonjour à tous,
    Je suis parvenu à mes fins, avec sans doute un code très peu optimisé, mais qui fonctionne. Le voici,
    import os
    from math import *
    import numpy as numpy
    import matplotlib.pyplot as pyplot
    import pylab
    k=open('17ml2012.txt','r') #ouvre le fichier
    n = 0
    for line in k:
    n += 1
    k.close() #ferme le fichier
    y=open('17ml2012.txt','r')
    os.remove('resu1.txt') #supprime resu1 et 2
    os.remove('resu2.txt')
    for i in range(n):
    a=y.readline() #lit les lignes du fichier .txt
    if 'EC 3' in a: #recherche les lignes avec EC3
    b=y.readline() #ecrit les deux lignes suivantes dans resu1 et resu2
    d=b[4:10]
    fd=open('resu1.txt','a')
    fd.write(d)
    c=y.readline()
    e=c[4:10]
    fd1=open('resu2.txt','a')
    fd1.write(e)
    y.close()
    fd.close()
    fd1.close()
    k=open('resu1.txt','r') #ouvre le fichier
    n = 0
    for line in k:
    n += 1
    k.close() #ferme le fichier
    y=open('resu1.txt','r')
    list = numpy.zeros(shape=(n,1))
    for i in range(n):
    a=y.readline()
    a=int(a)
    list[i]=[a]
    k2=open('resu2.txt','r') #ouvre le fichier
    n = 0
    for line in k2:
    n += 1
    k2.close() #ferme le fichier
    y=open('resu2.txt','r')
    list2 = numpy.zeros(shape=(n,1))
    for i in range(n):
    a2=y.readline()
    a2=int(a2)
    list2[i]=[a2]
    pyplot.plot(list,list2,'ro')
    pyplot.show()
    pyplot.axis([0,2000,0,2000])
    print(list,list2)

    Merci pour vos diverses aides qui m'ont permit de comprendre plusieurs choses.

    Bien cordialement,

    Hugues

  2. #22
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Tu es vraiment fâché avec les balises code, toi.

    Pourquoi t'acharne-tu à compter les lignes du fichier avant de le lire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    k=open('17ml2012.txt','r') #ouvre le fichier
    n = 0
    for line in k:
        n += 1
    k.close() #ferme le fichier
    Surtout si c'est un fichier qui peut peser jusqu'à 80 Go.

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Il n'est pas nécessaire de donner une limite à la boucle for qui va identifier mes lignes d'intérêts?
    En c on aurait:

    For i=1 to n
    i++
    end

    Je ne suis pas obligé de lui rentrer la valeur de n?

    Cordialement,

    Hugues

  4. #24
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    le k de VinsS n'est pas un entier mais un objet File, en python on ne doit surtout pas penser C, c'est une mauvaise idée...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #25
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Non, tu ne dois pas.

    Et surtout pas si ton fichier fait vraiment 80 Go, avec une moyenne de 10 caractères par ligne on atteindrait 8.000.000.000 de lignes et qu'en plus tu utilises Python 2 où range() crée d'abord la liste avant d'itérer dessus contrairement à xrange() qui crée un itérateur.

    tu peux directement lire ton fichier ligne par ligne sans savoir d'avance combien il y en a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    objf =  open('17ml2012.txt','r')
    while 1:
        l = objf.readline()
        if not l:
            break
        if 'EC 3' in l:
            etc ...
    Dans ton cas, une fonction génératrice serait plus élégant:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    def get_values(iterator):
        while 1:
            it = iterator()
            if not it:
                break
     
            if 'EC 3' in it:
                yield iterator(), iterator()
     
     
    objf =  open('17ml2012.txt','r')
    rl = objf.readline
     
    with open('resu1.txt', 'w') as outf1:
        with open('resu2.txt', 'w') as outf2:
            gen = get_values(rl)
            try:
                while 1:
                    val1, val2 = next(gen)
                    outf1.write(val1)
                    outf2.write(val2)
            except StopIteration:
                pass
     
    objf.close()

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Merci pour les informations,
    Je vais reprendre mon code avec vos propositions.

    Encore merci à tous pour l'aide rapide que vous m'avez apporté.

    Cordialement,

    Hugues

Discussions similaires

  1. Enregistrer données dans fichier txt
    Par man0n dans le forum Tkinter
    Réponses: 14
    Dernier message: 30/04/2014, 16h31
  2. Extraire des données dans fichier txt
    Par islande dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 28/03/2013, 14h42
  3. Récupérer donnée dans fichier texte
    Par all4linux dans le forum Web
    Réponses: 6
    Dernier message: 12/06/2010, 13h01
  4. [XL-2003] Données dans fichier .txt vers tableau en .xls
    Par Invité1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2009, 20h30
  5. lire données dans fichier txt
    Par flo456 dans le forum Langage
    Réponses: 5
    Dernier message: 14/09/2006, 09h01

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