2016-12-18 7 views
0

J'ai beaucoup de fichiers .xlsx qui est une douleur pour les convertir un par un à l'onglet des fichiers délimités parcomment convertir xlsx à l'onglet des fichiers délimités par

Je voudrais savoir s'il y a une solution pour faire par python. Voici ce que j'ai trouvé et ce essayé de faire avec l'échec Ce que j'ai trouvé et j'ai essayé la solution, mais ne fonctionne pas Mass Convert .xls and .xlsx to .txt (Tab Delimited) on a Mac

J'ai aussi essayé de le faire pour un fichier pour voir comment cela fonctionne, mais sans succès

#!/usr/bin/python 
import xlrd 
import csv 


def main(): 
    # I open the xlsx file 
    myfile = xlrd.open_workbook('myfile.xlsx') 
    # I don't know the name of sheet 
    mysheet = myfile.sheet_by_index(0) 
    # I open the output csv 
    myCsvfile = open('my.csv', 'wb') 
    # I write the file into it 
    wr = csv.writer(myCsvfile, delimiter="\t") 
    for rownum in xrange(mysheet.nrows): 
     wr.writerow(mysheet.row_values(rownum)) 
    myCsvfile.close() 
if __name__ == '__main__': 
    main() 
+1

en dehors de tous les mauvais noms de variables, votre programme fonctionne bien. quel est votre problème exactement? Quelle est l'erreur? –

+0

@ Jean-François Fabre pouvez-vous modifier mes noms de variables dans ma question? J'utilise Mac avec python2.7 – nik

+0

@ Jean-François Fabre il n'y a pas d'erreur, il ne crée pas de fichier – nik

Répondre

1

Pas vraiment besoin de la fonction principale.

Et pas sûr de vos problèmes d'indentation, mais c'est ainsi que j'écrirais ce que vous avez. (Et devrait fonctionner, selon le premier commentaire ci-dessus)

#!/usr/bin/python 
import xlrd 
import csv 

# open the output csv 
with open('my.csv', 'wb') as myCsvfile: 
    # define a writer 
    wr = csv.writer(myCsvfile, delimiter="\t") 

    # open the xlsx file 
    myfile = xlrd.open_workbook('myfile.xlsx') 
    # get a sheet 
    mysheet = myfile.sheet_by_index(0) 

    # write the rows 
    for rownum in xrange(mysheet.nrows): 
     wr.writerow(mysheet.row_values(rownum)) 
+0

Je reçois cette erreur 'wr.writerow (mysheet.row_values ​​(rownum)) UnicodeEncodeError: le codec 'ascii' ne peut pas encoder les caractères dans la position 131 -132: ordinal pas à portée (128) 'Savez-vous pourquoi? – nik

+0

J'ai aimé et accepté votre réponse mais j'apprécierais si vous pouviez le modifier pour me donner .txt au lieu de .csv, si possible – nik

+0

Umm .. 'open ('my.txt', 'wb')'? Les extensions de fichier sont très peu pertinentes au problème –