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 :

Python VS guillemets //CSV


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Par défaut Python VS guillemets //CSV
    Bonjour à tous,

    J'ai honte de faire appel à vous pour résoudre mon problème si bête, mais je commence à ne plus avoir beaucoup de cheveux sur la tête à force de m'en arracher...

    Je viens de commencer à créer un programme en Python (je n'ai jamais utilisé ce langage mais je suis habitué au JavaScript/Java/C) pour manipuler des fichier CSV et je n'arrive pas à recopier correctement ce fichier en y ajoutant des guillemets (en gros stocker des guillemets dans une String).

    J'ai pourtant tout essayé (enfin je crois) :
    ' " ' => FAIL
    ' \" ' => FAIL
    " \" " => FAIL
    etc.

    PS: je met des espaces pour la lisibilité, ils ne sont pas présent dans mon code

    Il m'ajoute systématiquement trois guillemet : """ à la place d'en mettre un...
    Pourtant avec une simple quote cela ne pose pas problème (" ' ") mais j'ai malheureusement besoin des guillemets et non d'une simple quote.

    Voici un bout de code pour faire plus simple :

    #debut
    import csv

    reader = csv.reader(open("test.csv","rb"))
    writer = csv.writer(open("test2.csv","wb"))

    for row in reader:
    mot = 'une chaine avec des "guillemets"'
    writer.writerow([str(mot), row[1], row[2]])

    #fin

    Cela m'affiche cela en sortie :
    "une chaine avec des ""guillemets""",prenom,age

    Alors qu'il me faudrait cela :
    une chaine avec des "guillemets",prenom,age

    Ou ça :
    'une chaine avec des "guillemets" ',prenom,age


    J'espère que j'ai été clair et que vous comprenez bien mon problème.
    Je vous remercie pour votre aide qui me serait très utile

    Bien à vous +++

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Heureusement que ça fait comme ça! C'est ce qui permettra la lecture par Excel, par exemple, qui retrouvera les guillemets internes: un fichier csv est fait pour être relu par des moyens csv.

    Tu peux, bien sûr, intervenir à la main avec un simple éditeur de texte, mais il faut accepter que les guillemets internes soient doublés (et le restent!).

    Ton problème a cependant une solution: transformer les lignes csv en chaines "normales". Mais ça ne pourra plus être relu comme csv!

    Exemple:

    - ton fichier csv contient quelque chose comme:

    "une chaine avec des ""guillemets""";Albert;32
    - relire ton fichier csv avec le module csv => chaque ligne sera une liste de champs comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['une chaine avec des "guillemets"', 'Albert', 42]
    - éditer la ligne en tant que chaine. Comme il y a un nombre (l'age), il faudra convertir ce nombre pour fabriquer la nouvelle chaine:

    Il suffira de séparer les champs par des virgules comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            ch = ""
            for elem in ligne:
                if isinstance(elem, (int, long)):
                    elem = str(elem)
                ch += elem + ','     
            ch = ch[:-1] # pour supprimer la dernière virgule en trop
    Et tu auras la ligne voulue sous forme d'une seule chaine:

    'une chaine avec des "guillemets",Albert,32'

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut, ce n'est pas le choix qui manque dans les paramètres de CSV pour cela.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import csv
    with open('eggs.csv', 'wb') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=',', escapechar=' ', 
                                quoting=csv.QUOTE_NONE)
        spamwriter.writerow(['une chaine avec des "guillemets"', 'Foo', 'Baz'])
    une chaine avec des "guillemets ",Foo,Baz

    http://docs.python.org/2/library/csv...hlight=csv#csv

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Par défaut Thanx
    Merci beaucoup pour vos réponses aussi rapides
    Je passe le post en [résolu]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Créer un écrire un fichier de données avec Python ? Pas de CSV ou .txt !
    Par Ben20 dans le forum Général Python
    Réponses: 5
    Dernier message: 16/04/2015, 12h22
  2. python et fichier .CSV
    Par billyrose dans le forum Général Python
    Réponses: 7
    Dernier message: 22/07/2008, 07h53
  3. Conversion d'un classeur en csv : Présence de guillemets indésirables
    Par cpf2006 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2008, 10h21
  4. Réponses: 29
    Dernier message: 09/08/2007, 15h39
  5. [CSV] importation CSV avec des guillemets
    Par trash_board dans le forum Langage
    Réponses: 3
    Dernier message: 12/09/2006, 14h08

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