Python convertir csv en xlsx

Dans ce post il y a un exemple Python pour convertir csv en xls.

cependant, mon fichier a plus de 65536 lignes donc xls ne fonctionne pas. Si je nomme le fichier xlsx, cela ne fait pas de différence. Y a-t-il un paquet Python à convertir en xlsx?

29
demandé sur Community 2013-07-15 14:21:28

6 réponses

voici un exemple d'utilisation de 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()

FYI, il y a aussi un paquet appelé openpyxl , qui peut lire/écrire des fichiers Excel 2007 xlsx/xlsm.

Espère que ça aide.

51
répondu alecxe 2017-07-25 19:20:11

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 le nom du fichier.

21
répondu chfw 2018-08-03 21:46:05

Ajouter une réponse qui utilise exclusivement les pandas de la bibliothèque pour lire dans un .csv fichier et de l'enregistrer en tant que .fichier xlsx. Cet exemple utilise pandas.read_csv ( lien vers docs ) et pandas.dataframe.to_excel ( lien vers docs ).

entièrement reproductibles exemple utilise numpy pour générer des nombres aléatoires et peuvent être supprimés 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()
5
répondu patrickjlong1 2017-12-29 17:53:10
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')
2
répondu zhuhuren 2017-03-09 19:07:28

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")
2
répondu Rubycon 2018-08-25 20:28:09

il y a un moyen simple

import os
import csv
import sys

from openpyxl import Workbook

reload(sys)
sys.setdefaultencoding('utf8')

if __name__ == '__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')
0
répondu David Ding 2017-05-05 02:23:25