web-dev-qa-db-fra.com

python: création d'un classeur Excel et vidage de fichiers csv sous forme de feuilles de calcul

J'ai quelques fichiers csv que je voudrais transférer en tant que nouvelles feuilles de calcul dans un classeur Excel (xls/xlsx). Comment y parvenir?

J'ai trouvé Google 'pyXLwriter' dans Google mais il semble que le projet ait été arrêté. Pendant que j'essayais 'pyXLwriter', j'aimerais savoir s'il existe des alternatives/suggestions/modules?

Merci beaucoup.

[Modifier]

Voici ma solution: (tout le monde a beaucoup plus maigre, beaucoup de solution Pythonic? Commentez. Thx)

import glob
import csv
import xlwt
import os

wb = xlwt.Workbook()


for filename in glob.glob("c:/xxx/*.csv"):
    (f_path, f_name) = os.path.split(filename)
    (f_short_name, f_extension) = os.path.splitext(f_name)
    ws = wb.add_sheet(str(f_short_name))
    spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"')
    row_count = 0
    for row in spamReader:
        for col in range(len(row)):
            ws.write(row_count,col,row[col])
        row_count +=1

wb.save("c:/xxx/compiled.xls")

print "Done"
18
siva

Vous ne savez pas ce que vous entendez par "beaucoup plus maigre, beaucoup Pythonique" mais vous pourriez certainement le préciser un peu:

import glob, csv, xlwt, os
wb = xlwt.Workbook()
for filename in glob.glob("c:/xxx/*.csv"):
    (f_path, f_name) = os.path.split(filename)
    (f_short_name, f_extension) = os.path.splitext(f_name)
    ws = wb.add_sheet(f_short_name)
    spamReader = csv.reader(open(filename, 'rb'))
    for rowx, row in enumerate(spamReader):
        for colx, value in enumerate(row):
            ws.write(rowx, colx, value)
wb.save("c:/xxx/compiled.xls")
28
John Machin

Vous trouverez tout ce dont vous avez besoin dans ce didacticiel xlwt . Ces bibliothèques ( xlrd et xlwt ) sont les choix les plus courants pour la gestion des interactions Excel en Python. L'inconvénient est que, pour le moment, ils ne prennent en charge que le format binaire Excel (.xls).

12
Sergio

J'écris toujours le format XML Office 2003 sous forme de chaînes. C'est assez facile à faire et beaucoup plus facile à gérer que d'écrire et de compresser ce qui constitue un document xlsx. De plus, il ne nécessite aucune bibliothèque externe. (bien que l'on puisse facilement rouler le leur)

De plus, Excel prend en charge le chargement de fichiers CSV. Les deux sont délimités par des espaces ou par des caractères. Vous pouvez soit le charger directement, soit essayer de le copier-coller, puis appuyer sur le bouton Text-To-Columns dans les options. Cette option n'a bien sûr rien à voir avec python.

3
adorablepuppy

Utilisez xlsxwriter pour créer et écrire dans un fichier Excel en python.

Installez-le en: pip install xlsxwriter

import xlsxwriter


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()
3
Naveen Agarwal

Egalement disponible dans le repo GitHub "Kampfmitexcel" ...

import csv, xlwt, os

def input_from_user(Prompt):
    return raw_input(Prompt).strip()

def make_an_Excel_file_from_all_the_txtfiles_in_the_following_directory(directory):
    wb = xlwt.Workbook()
    for filename in os.listdir(data_folder_path):
        if filename.endswith(".csv") or filename.endswith(".txt"):
            ws = wb.add_sheet(os.path.splitext(filename)[0])
            with open('{}\\{}'.format(data_folder_path,filename),'rb') as csvfile:
                reader = csv.reader(csvfile, delimiter=',')
                for rowx, row in enumerate(reader):
                    for colx, value in enumerate(row):
                        ws.write(rowx, colx, value)
    return wb

if __== '__main__':
    path_to_data = input_from_user("Where is the data stored?: ")
    xls = make_an_Excel_file_from_all_the_txtfiles_in_the_following_directory(path_to_data)
    xls_name = input_from_user('What do you want to name the Excel file?: ')
    xls.save('{}\\{}{}'.format(data_folder_path,xls_name,'.xls'))
    print "Your file has been saved in the data folder."
3
user809695

Ceci est basé sur la réponse, votre réponse elle-même. Mais j'utilise xlsxwriter parce qu’il accepte plus de données au format xlsx. Là où le xlwt vous limite à 65556 lignes et au format xls.

import xlsxwriter
import glob
import csv
workbook = xlsxwriter.Workbook('compiled.xlsx') 
for filename in glob.glob("*.csv"):
    ws = workbook.add_worksheet(str(filename.split('.')[0]))
    spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"')
    row_count = 0
    print filename
    for row in spamReader:
        for col in range(len(row)):
            ws.write(row_count,col,row[col])
        row_count +=1

workbook.close()
1