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 :

.CSV et Caractères perturbants


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut .CSV et Caractères perturbants
    Bonjour.

    Je tente de traiter des données dans un fichier portant l'extension .xls mais qui semble en fait être un fichier .CSV. (car ni la bibliothèque xlrd ou openpyxl ne me permettent de travailler sur le fichier source.)

    J'utilise donc la bibliothèque CSV mais je n'arrive pas à accéder aux données souhaitées.
    Quand j'ouvre mon fichier avec Notepad++ je vois apparaitre des doubles cotes " qui je pense perturbe la lecture par mon code python, (du reste, je ne vois pas ce que font ces doubles cotes dans ce fichiers CSV) :
    Nom : screenShot.PNG
Affichages : 138
Taille : 61,6 Ko

    Mon fichier source https://www.dropbox.com/scl/fi/j8i53...kzcxq1vyfbh9dy
    Et ici mon code python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import csv
     
    File = open("fichier_source")
    Reader = csv.reader(File, delimiter="\t",)
    Data = list (Reader)
    print(Data[2][0])

  2. #2
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut C'est faux
    Je crois que ton fichier est tout sauf un CSV.
    Pour me croire, voici un article de Wikipedia : https://fr.wikipedia.org/wiki/Comma-separated_values
    Que veut donc dire CSV ?
    -Comma-separated values

    Séparation de valeurs par virgule, or ce n'est pas le cas dans ton fichier : les séparations sont faîtes à partir d'espace...
    Faut donc revoir le format quitte à programmer son propre parseur. Et crois moi c'est du gâteau en Python.

    Et non ce n'est pas un fichier xls, du moins le format.

  3. #3
    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
    Salut,

    Si le contenu du fichier ressemble à la photo postée, ce n'est pas un fichier CSV mais un fichier texte contenant des blocs d'informations sous différents formats. Il va falloir commencer par le découper en parties (les blocs) et les traiter séparément.

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

  4. #4
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Pour apporter quelques précisions :
    La photo postée est le fichier en question ouvert avec Notepad++ en demandant d'afficher tous les caractères cachés.
    Les flèches oranges représentent des tabulations.

    Les valeurs qui m'intéressent sont donc séparées par des tabulations (au lieu des commas), ce serait donc plutôt un .tsv, mais il y a ces doubles cotes qui perturbent le traitement je pense.

    On retrouve bien chaque ligne séparées pas un "CRLF", s'il n'y avait pas ces doubles cotes, on pourrait trouver chaque colonnes séparées par les tab et je pense que mon code fonctionnerait.

  5. #5
    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
    Salut,

    Citation Envoyé par hary66 Voir le message
    on pourrait trouver chaque colonnes séparées par les tab et je pense que mon code fonctionnerait.
    C'est quoi le but lire le fichier? ou faire fonctionner votre code?

    Si on vous dit que ce n'est pas un fichier CSV, çà implique que le module CSV ne pourra pas en faire quelque chose... et votre code ne fonctionnera jamais sans avoir remis en forme le fichier.

    Ce qui suppose lire le fichier "à la main" avec une lecture ligne à ligne. Et quitte à le remettre "en forme" autant y récupérer ce que vous voulez. Et comme ce ne sont que des opérations de base sur les chaînes de caractères...

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

  6. #6
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par hary66 Voir le message
    mais il y a ces doubles cotes qui perturbent le traitement je pense.

    On retrouve bien chaque ligne séparées pas un "CRLF", s'il n'y avait pas ces doubles cotes, on pourrait trouver chaque colonnes séparées par les tab et je pense que mon code fonctionnerait.
    Étonnement il n'y a pas de doubles quotes quand on l'ouvre avec dropbox, peut-être que ces doubles qotes veulent juste dire que c'est le début d'une nouvelle ligne?
    En tout cas j'ai testé ton code et ça marche plutôt bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(Data[2])
    print(Data[2][0])
    affichent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ['Reader_Version\t2\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t']
    Reader_Version	2

  7. #7
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    Il n'y a pas de problème.

    Effectivement j'ai pas vu delimiter='\t'Tu pourras mettre en

  8. #8
    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
    Citation Envoyé par ABD-Z Voir le message
    Il n'y a pas de problème.
    Les '"' sont dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> open('Carac_Perm_Dynamique_21-11-17_0920.xls', 'rb')
    <_io.BufferedReader name='Carac_Perm_Dynamique_21-11-17_0920.xls'>
    >>> f = _
    >>> next(f)
    b'"LabVIEW Measurement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"\r\n'
    Et si j'ouvre le fichier avec csv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> f = open('Carac_Perm_Dynamique_21-11-17_0920.xls', 'r')
    >>> import csv
    >>> r = csv.reader(f, delimiter= '\t')
    >>> next(r)
    ['LabVIEW Measurement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t']
    çà ne voit pas le demiliteur (on aurait plus d'items dans la liste) parce qu'il est "dans" la chaine de caractères (un quoted literal).

    Par contre on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> f = open('Carac_Perm_Dynamique_21-11-17_0920.xls', 'r')
    >>> line = next(f)
    >>> line
    '"LabVIEW Measurement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"\n'
    >>> line = line[1:-2]
    >>> line
    'LabVIEW Measurement\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
    >>> line.split('\t')
    ['LabVIEW Measurement', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
    >>>
    Mais çà ne dit pas que faire des colonnes vides qui dépendent du bloc lu.

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

  9. #9
    Membre chevronné
    Avatar de ABD-Z
    Homme Profil pro
    Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site
    Inscrit en
    Septembre 2016
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingé. webapps embarquées – Admin/mainteneur serveur/BDD – Formateur WordPress – Desiger : logo/site

    Informations forums :
    Inscription : Septembre 2016
    Messages : 302
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Mais çà ne dit pas que faire des colonnes vides qui dépendent du bloc lu.
    Les colonnes vides peuvent être enlevées avec un strip (Data[2][0].strip()).split()
    ce qui donne une liste plutôt exploitable :
    ['Reader_Version', '2']

  10. #10
    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
    Citation Envoyé par ABD-Z Voir le message
    ce qui donne une liste plutôt exploitable :
    ['Reader_Version', '2']
    Il y a toujours moyen d'en faire quelque chose pourvu de regarder comment sont construites les données, s'appliquee à les extraire... en fonction de ce qu'on veut en faire,
    sans les mouliner telles quelles avec le csv.reader.

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

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Quand on regarde juste l'image on ne voit pas forcément qu'il y a en fait trois parties dans ce fichier :

    1- les 21 premières lignes ce sont des header contenant des informations mais ce ne sont pas des données.
    2- à la ligne 22 on a les étiquettes identifiants les colonnes contenant les données.
    3- à partir de la ligne 23 on a les données...

    Si on veut juste récupérer les données on pourra ignorer la première partie...
    En tous cas cette première partie nécessite un traitement différent...

  12. #12
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 219
    Par défaut
    hello,
    le fichier est en format lvm (labview-measurement-file) et il existe le module lvm-read (présent dans pypi) qui permet de lire ce format.
    Ami calmant, J.P

  13. #13
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    le fichier est en format lvm (labview-measurement-file) et il existe le module lvm-read (présent dans pypi) qui permet de lire ce format.
    Ami calmant, J.P
    Je suis un peu noyé avec toutes ces informations.

    Mais en effet, c'est un fichier issu d'un programme Labview qui pourtant est sauvegardé avec une extension xls .

    Mon collègue à finalement réussi à en faire quelque chose avec pandas.

Discussions similaires

  1. fichier csv sans caractère de fin de fichier
    Par lamue83 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 03/06/2009, 17h16
  2. csv et caractère d'échappement
    Par karoudja dans le forum Général Python
    Réponses: 3
    Dernier message: 19/09/2008, 16h34
  3. [MySQL] import CSV et caractères spéciaux
    Par loganblack dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/04/2008, 22h55
  4. [Shell] CSV import , caractères spéciaux
    Par AngeDéchu dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 10/04/2008, 14h06
  5. Réponses: 4
    Dernier message: 29/02/2008, 11h11

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