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ération de données dans un fichier .txt


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Récupération de données dans un fichier .txt
    bonjour,
    j'ai un programme qui calcul des coordonnées en 3D et qui les stock dans un fichier .txt sous forme d'une longue liste de la forme:
    [x1,y1,z1][x2,y2,z2]....
    et j ai crée un autre script qui récupère ces données pour les afficher mais j'ai un problème au niveau du readlines()
    en effet pour lui, mes listes de coordonnées sont une longue chaîne de caractère et je n'arrive pas à récupérer mes coordonnées du coup.
    par exemple quand je fais un print de la liste que je récupère j'obtiens : ['[-1.7822742047954969, 2.1871538240312134, -3.7135064367274295].....
    et c'est justement le caractère ' qui me pose problème, car du coup mon extrait de code ne peut pas marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def affichage(C,fichier,n,N):
        '''fonction qui affiche l'animation depuis un fichier texte contenant toutes les coordonnées au cours du temps
        n correspond au nombre de corps, N correspond au nombre d'itérations'''
        l=fichier.readlines()
        for i in range(N):
            rate(speed)
            for j in range(n):
                corps = C[j]
                corps.x = double(l[i+j][0])
                corps.y = double(l[i+j][1])
                corps.z = double(l[i+j][2])
        return 0
    (il me dit out of range)

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ce ne fut effectivement pas une bonne idée de sauver les données en texte.

    Pour cela le module pickle aurait mieux convenu, il permet de sauvegarder et de récupérer des objets python. Ex: des listes de float.

    Si tu veux malgré tout récupérer tes données il va falloir parser le texte.

    Est-ce que les données sont sur une seule ligne ou plusieurs ?

    readlines() te retourne la liste des lignes, tu peux donc itérer dessus.

    Ensuite tu peux splitter le texte avec les crochets et les virgules ou , plus immédiat je pense, une expression régulière pour récupérer le contenu des crochets et splitter les trois données avec les virgules.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >>> text = "[-1.7822, 2.187, -3.713][5.3247, -2.547, 4.2587]"
    >>> import re
    >>> crible = re.compile("(?<=\[)(.*?)(?=\])")
    >>> data = crible.findall(text)
    >>> for i in data:
    ...     print(i.split(','))
    ... 
    ['-1.7822', ' 2.187', ' -3.713']
    ['5.3247', ' -2.547', ' 4.2587']

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    oui en effet mes données sont sur plusieurs lignes;
    je ne connaissais pas pickle, je vais me renseigner
    je ne comprend pas ta fonction split car tu lui demandes de split entre chaque ' et il te split entre les deux crochets.
    Merci pour ton aide

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    C'est la virgule qui sert à splitter pas l'apostrophe.

    data est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ['-1.7822, 2.187, -3.713', '5.3247, -2.547, 4.2587']
    # soit ça
    '-1.7822, 2.187, -3.713'
    # et ça
    '5.3247, -2.547, 4.2587'
    donc si on splitte le premier avec les virgules: ['-1.7822', '2.187', '-3.713']

    Tu peux tout remettre en forme en un seul passage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> d = []
    >>> for i in data:
    ...     d.append([float(x) for x in i.split(',')])
    ... 
    >>> d
    [[-1.7822, 2.187, -3.713], [5.3247, -2.547, 4.2587]]
    Là tu as récupéré tes données.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Je me permet d'interférer dans votre discussion.
    @Azghar: en te lisant, j'ai l'impression que certaines notions fondamentales te manquent ...

    En Python la représentation d'un objet chaîne de caractères (ou string), se fait entre deux apostrophes ou entre deux guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Ceci est une chaîne de caractères'
    "Et ceci est une autre chaîne de caractères'
    VinsS spécifie dans la méthode split(',') que le caractère qui doit être utilisé pour découper la chaîne de caractères est une virgule.
    Elle est représentée ici entre deux apostrophes.

    Salutations.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/04/2011, 15h42
  2. Récupération de données dans un fichier .txt
    Par Crackos dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/09/2010, 14h15
  3. Réponses: 6
    Dernier message: 20/01/2008, 16h32
  4. Réponses: 16
    Dernier message: 10/11/2005, 21h10
  5. Réponses: 6
    Dernier message: 23/10/2005, 12h24

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