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.
Les exemples les plus élémentaires utilisant les deux bibliothèques décrites ligne par ligne:
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])
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)
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.
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')