Dans this post , il existe un exemple Python pour convertir de csv en xls.
Cependant, mon fichier contient plus de 65 536 lignes, donc xls ne fonctionne pas. Si je nomme le fichier xlsx, cela ne fait aucune différence. Existe-t-il un package Python) à convertir en xlsx?
Voici un exemple utilisant xlsxwriter :
import os
import glob
import csv
from xlsxwriter.workbook import Workbook
for csvfile in glob.glob(os.path.join('.', '*.csv')):
workbook = Workbook(csvfile[:-4] + '.xlsx')
worksheet = workbook.add_worksheet()
with open(csvfile, 'rt', encoding='utf8') as f:
reader = csv.reader(f)
for r, row in enumerate(reader):
for c, col in enumerate(row):
worksheet.write(r, c, col)
workbook.close()
Pour votre information, il existe également un package appelé openpyxl , capable de lire/écrire des fichiers Excel 2007 xlsx/xlsm.
J'espère que ça t'as aidé.
Avec ma bibliothèque pyexcel
,
$ pip install pyexcel pyexcel-xlsx
vous pouvez le faire en une ligne de commande:
from pyexcel.cookbook import merge_all_to_a_book
# import pyexcel.ext.xlsx # no longer required if you use pyexcel >= 0.2.2
import glob
merge_all_to_a_book(glob.glob("your_csv_directory/*.csv"), "output.xlsx")
Chaque csv aura sa propre feuille et le nom sera leur nom de fichier.
from openpyxl import Workbook
import csv
wb = Workbook()
ws = wb.active
with open('test.csv', 'r') as f:
for row in csv.reader(f):
ws.append(row)
wb.save('name.xlsx')
L'ajout d'une réponse qui utilise exclusivement la bibliothèque pandas pour lire un fichier .csv et l'enregistrer en tant que fichier .xlsx. Cet exemple utilise pandas.read_csv
( Lien vers la documentation ) et pandas.dataframe.to_Excel
_ ( Lien vers la documentation ).
L'exemple entièrement reproductible utilise numpy pour générer des nombres aléatoires uniquement. Vous pouvez le supprimer si vous souhaitez utiliser votre propre fichier .csv.
import pandas as pd
import numpy as np
# Creating a dataframe and saving as test.csv in current directory
df = pd.DataFrame(np.random.randn(100000, 3), columns=list('ABC'))
df.to_csv('test.csv', index = False)
# Reading in test.csv and saving as test.xlsx
df_new = pd.read_csv('test.csv')
writer = pd.ExcelWriter('test.xlsx')
df_new.to_Excel(writer, index = False)
writer.save()
Comment je le fais avec openpyxl lib:
import csv
from openpyxl import Workbook
def convert_csv_to_xlsx(self):
wb = Workbook()
sheet = wb.active
CSV_SEPARATOR = "#"
with open("my_file.csv") as f:
reader = csv.reader(f)
for r, row in enumerate(reader):
for c, col in enumerate(row):
for idx, val in enumerate(col.split(CSV_SEPARATOR)):
cell = sheet.cell(row=r+1, column=idx+1)
cell.value = val
wb.save("my_file.xlsx")
Il y a un moyen simple
import os
import csv
import sys
from openpyxl import Workbook
reload(sys)
sys.setdefaultencoding('utf8')
if __== '__main__':
workbook = Workbook()
worksheet = workbook.active
with open('input.csv', 'r') as f:
reader = csv.reader(f)
for r, row in enumerate(reader):
for c, col in enumerate(row):
for idx, val in enumerate(col.split(',')):
cell = worksheet.cell(row=r+1, column=c+1)
cell.value = val
workbook.save('output.xlsx')