web-dev-qa-db-fra.com

Comment enregistrer une feuille de calcul Excel au format CSV

Je veux écrire un script Python qui lit dans une feuille de calcul Excel et enregistre certaines de ses feuilles de calcul sous forme de fichiers CSV.

Comment puis-je faire ceci?

J'ai trouvé modules tiers pour lire et écrire des fichiers Excel à partir de Python, mais pour autant que je sache, ils ne peuvent enregistrer que des fichiers au format Excel (c'est-à-dire * .xls). Si je me trompe ici, un exemple de code montrant comment faire ce que j'essaie de faire avec ces modules serait apprécié.

J'ai également rencontré ne solution que je ne comprends pas très bien, mais qui semble être spécifique à Windows, et ne m'aiderait donc pas de toute façon, car je veux le faire sous Unix. En tout cas, il n'est pas clair pour moi que cette solution puisse être étendue pour faire ce que je veux faire, même sous Windows.

18
kjo

Les exemples les plus élémentaires utilisant les deux bibliothèques décrites ligne par ligne:

  1. Ouvrez le classeur xls
  2. Référencez la première feuille de calcul
  3. Ouvrir en binaire écrire le fichier csv cible
  4. Créer l'objet d'écriture csv par défaut
  5. Boucle sur toutes les lignes de la première feuille de calcul
  6. Vider les lignes dans le csv

import xlrd
import csv

with xlrd.open_workbook('a_file.xls') as wb:
    sh = wb.sheet_by_index(0)  # or wb.sheet_by_name('name_of_the_sheet_here')
    with open('a_file.csv', 'wb') as f:   # open('a_file.csv', 'w', newline="") for python 3
        c = csv.writer(f)
        for r in range(sh.nrows):
            c.writerow(sh.row_values(r))

import openpyxl
import csv

wb = openpyxl.load_workbook('test.xlsx')
sh = wb.get_active_sheet()
with open('test.csv', 'wb') as f:  # open('test.csv', 'w', newline="") for python 3
    c = csv.writer(f)
    for r in sh.rows:
        c.writerow([cell.value for cell in r])
40
Boud

L'utilisation de pandas sera un peu plus courte:

import pandas as pd

df = pd.read_Excel('my_file', sheetname='my_sheet_name')  # sheetname is optional
df.to_csv('output_file_name', index=False)  # index=False prevents pandas to write row index

# oneliner
pd.read_Excel('my_file', sheetname='my_sheet_name').to_csv('output_file_name', index=False)
12
FabienP

Utilisez le module xlrd ou openpyxl pour lire les documents xls ou xlsx respectivement, et le module csv module à écrire.

Alternativement, si vous utilisez Jython , vous pouvez utiliser la bibliothèque Apache POI pour lire soit .xls ou .xlsx, et le module CSV natif sera toujours disponible.

5
Charles Duffy

Lisez d'abord votre feuille de calcul Excel dans Pandas. Le code ci-dessous importera votre feuille de calcul Excel dans Pandas en tant que OrderedDict qui contient toutes vos feuilles de calcul en tant que DataFrames. Ensuite, utilisez simplement le worksheet_name comme clé pour accéder à une feuille de calcul spécifique en tant que DataFrame et enregistrer uniquement la feuille de calcul requise en tant que fichier csv en utilisant df.to_csv(). J'espère que cela fonctionnera dans votre cas.

import pandas as pd
df = pd.read_Excel('YourExcel.xlsx', sheet_name=None)
df['worksheet_name'].to_csv('output.csv')  
0
Ashu007