web-dev-qa-db-fra.com

Python convertissez csv en xlsx

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?

36
user670186

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é.

66
alecxe

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.

27
chfw
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')
7
zhuhuren

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()
6
patrickjlong1

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")
4
Rubycon

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')
0
David Ding