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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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