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 :

Module xlrd : Conversion xls en csv [Python 2.X]


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut Module xlrd : Conversion xls en csv
    Bonjour,

    Aujourd'hui je reviens avec une question concernant la conversion d'un fichier .xls ou .xlsx en .csv !

    Mon soucie est que je n'est pas de message d'erreur lors de l'exécution de mon script mais que le fichier .cvs n'est pas créer dans le même dossier que le fichier d'origine mais là où se trouve le .py.
    Je poste donc mon code en espèrant que vous seriez plus inspiré que moi et m'expliqué comment avoir ce fichier .csv dans le même dossier que le .xls .
    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
    import xlrd
    import csv
    import sys
    import os
     
    excel_file = 'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona.xls'
    (path, filename) = os.path.split(excel_file)
    index=1
    print 'path:', path, '   name:', filename
    sizeName= len(filename)-4
    fileN= filename[0:sizeName]
    print 'size:', sizeName, ' fileN:', fileN
     
    wb = xlrd.open_workbook(excel_file)
    sh = wb.sheet_by_index(index)
     
    your_csv_file = open(''.join([fileN,'.csv']), 'wb')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
    for rownum in xrange(sh.nrows):
        wr.writerow([unicode(entry).encode("utf-8") for entry in sh.row_values(rownum)])
    your_csv_file.close()
    Merci !

  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,

    Et comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    your_csv_file = open(os.path.join(path, fileN, '.csv')), 'wb')
    ?

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    Bonjour !

    your_csv_file = open(os.path.join(path, fileN, '.csv')), 'wb')
    Ne fonctionne pas mais le problème venait bien du open(). J'ai un peu cherché et trouvé quelque chose qui fonctionne mais qui n'est peu être pas le plus optimum :
    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
    import xlrd
    import csv
    import sys
    import os
     
     
    excel_file = 'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona.xls'
    (path, filenameExt) = os.path.split(excel_file)
    len_filename = len(filenameExt)-4
    filename=filenameExt[0:len_filename]
    filenameCSV= ''.join([filename,'.csv'])
    pathCSV = '/'.join([path,filenameCSV])
    index=1
    wb = xlrd.open_workbook(excel_file)
    sh = wb.sheet_by_index(index)
    your_csv_file = open(pathCSV , 'wb')
    wr = csv.writer(your_csv_file, delimiter=';',quoting=csv.QUOTE_ALL)
    for rownum in xrange(sh.nrows):
        wr.writerow([unicode(entry).encode("utf-8") for entry in sh.row_values(rownum)])
    your_csv_file.close()
    Merci !

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Tout cela est fort laborieux!
    Pourquoi ne pas utiliser os.path.splitext:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import os
    >>> excel_file = 'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona.xls'
    >>> csv_file = os.path.splitext(excel_file)[0] + '.csv'
    >>> csv_file
    u'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona.csv'
    moins de lignes de code = moins de bugs et un code plus facile à relire dans quelques jours/semaines/mois...

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

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 98
    Points : 59
    Points
    59
    Par défaut
    En effet c'est mille fois plus simple. Merci pour le conseil, je ne connaissais pas encore le splitext !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par aurelie.guegan.15 Voir le message
    En effet c'est mille fois plus simple. Merci pour le conseil, je ne connaissais pas encore le splitext !
    Les bibliothèques Python contiennent (en général) tout ce qu'il faut pour éviter au programmeur d'avoir à recoder à chaque fois des fonctionnalités simples dont on a souvent besoin. C'est l'intérêt de mettre cela dans un pot commun libellé "bibliothèque".
    La fonctionnalité serait plutôt ici "comment créer un nom de fichier avec une autre extension à partir d'un nom d'un fichier existant?"

    C'est un détail du script que vous êtes en train de coder (et sans rapport avec le titre de votre post: "Module xlrd : Conversion xls en csv").

    Raconté comme çà, on part d'un nom de fichier qui se termine par .xls et on veut remplacer ce .xls par .csv.
    Sans connaître os.path.splitext, on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> excel_file = u'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona.xls'
    >>> excel_file.rsplit('.', 1)
    [u'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona', u'xls']
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> excel_file[:-4]
    u'C:/Users/AUGU/Documents/GL/code_python/BASE/xlrd/STG_Alberona'
    i.e. utiliser les fonctionnalités de bases des chaînes de caractères.
    os.path.splitext ne fait pas grand chose de plus sinon documenter l'intention: çà dit 'implicitement' qu'on travaille sur un nom de fichier et non sur une simple chaîne de caractères, qu'on veut séparer l'extension du reste et non un truc anonyme qui commence par le dernier '.' ou les 4 derniers caractères.

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

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

Discussions similaires

  1. Encodage conversion xls en csv
    Par Daasar dans le forum Général Python
    Réponses: 0
    Dernier message: 11/02/2014, 17h39
  2. [PHP 5.2] Conversion xls en csv ou txt
    Par Delors dans le forum Langage
    Réponses: 1
    Dernier message: 13/07/2009, 11h52
  3. Conversion XLS CSV : probleme virgule
    Par B&B dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/05/2008, 16h55
  4. conversion xls en csv
    Par NATOU2 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/01/2008, 10h52
  5. Conversion xls / csv
    Par ktsys dans le forum C++
    Réponses: 3
    Dernier message: 18/04/2007, 15h27

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