web-dev-qa-db-de.com

python: Erstellen einer Excel-Arbeitsmappe und Ausgeben von CSV-Dateien als Arbeitsblätter

Ich habe einige csv-Dateien, die ich als neue Arbeitsblätter in einer Excel-Arbeitsmappe (xls/xlsx) speichern möchte. Wie erreiche ich das?

Googled und fand 'pyXLwriter', aber es scheint, als ob das Projekt gestoppt wurde. Wenn ich 'pyXLwriter' ausprobieren möchte, möchte ich wissen, gibt es Alternativen/Vorschläge/Module?

Danke vielmals.

[Bearbeiten]

Hier ist meine Lösung: (Wer hat viel schlankere, viel Pythonic-Lösung? Kommentieren. 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

Nicht sicher, was du mit "viel schlanker, viel Pythonic" meinen, aber du könntest es sicherlich ein wenig verbessern:

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

In diesem xlwt-Tutorial finden Sie alles, was Sie brauchen. Diese Bibliotheken ( xlrd und xlwt ) sind die beliebtesten Optionen für die Verwaltung der Excel-Interaktion in Python. Der Nachteil ist, dass sie derzeit nur das binäre Excel-Format (.xls) unterstützen.

12
Sergio

Ich schreibe immer nur das Office 2003-XML-Format durch Zeichenfolgen. Es ist ziemlich einfach und viel einfacher zu verwalten, als das zu schreiben, was ein xlsx-Dokument ausmacht. Es werden auch keine externen Bibliotheken benötigt. (obwohl man leicht selbst rollen könnte)

Excel unterstützt auch das Laden von CSV-Dateien. Sowohl Leerzeichen als auch Zeichen getrennt. Sie können es entweder direkt laden oder versuchen, es zu kopieren und einzufügen, und dann in den Optionen auf die Schaltfläche Text-To-Columns klicken. Diese Option hat natürlich nichts mit Python zu tun.

3
adorablepuppy

Verwenden Sie xlsxwriter zum Erstellen und Schreiben einer Excel-Datei in Python.

Installieren Sie es mit: 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

Auch im GitHub Repo "Kampfmitexcel" erhältlich ...

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

Dies basiert auf der Antwort Ihrer Antwort selbst. Der Grund, warum ich xlsxwriter verwende, ist, dass er mehr Daten im xlsx-Format akzeptiert. Wobei das xlwt Sie auf 65556 Zeilen und das xls-Format begrenzt.

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