python: создание книги Excel и выгрузка файлов CSV в виде листов

У меня есть несколько файлов csv, которые я хотел бы сбросить как новые рабочие листы в книге Excel (xls / xlsx). Как мне этого добиться?

Погуглил и нашел pyXLwriter, но похоже, что проект остановлен. Пока я пробую pyXLwriter, хотел бы знать, есть ли какие-нибудь альтернативы / предложения / модули?

Огромное спасибо.

[Редактировать]

Вот мое решение: (у кого-то есть гораздо более компактное, много питоническое решение? Прокомментировать. Спасибо)

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"

person siva    schedule 18.04.2011    source источник
comment
Попробуйте Сикули. Это проект Jython, но вы можете использовать его для автоматизации любых задач графического интерфейса.   -  person Patrick    schedule 18.04.2011
comment
осторожно. Xlwt ограничивает количество входов до 65 556. Но если у вас больше строк, перейдите на xlsxwriter   -  person Baradwaj Aryasomayajula    schedule 20.07.2017


Ответы (6)


Не уверен, что вы подразумеваете под "намного более компактным, более питоническим", но вы, безусловно, могли бы немного его приукрасить:

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")
person John Machin    schedule 25.04.2011

Вы найдете все необходимое в этом руководстве по xlwt. Эти библиотеки (xlrd и xlwt) являются наиболее популярным выбором для управления взаимодействием Excel в Python. Обратной стороной является то, что на данный момент они поддерживают только двоичный формат Excel (.xls).

person Sergio    schedule 18.04.2011
comment
да, просматривая учебник в формате pdf. Идея щелкнула, где я мог бы создать файлы xls с множеством листов и использовать модуль / метод читателя csv python для построчного вывода на листы. :) - person siva; 18.04.2011
comment
Да, в этом и заключается суть. Я бы посоветовал вам создавать листы тогда, когда они вам нужны, а не заранее. - person Sergio; 18.04.2011
comment
Ссылка на руководство xlwt не работает - person James Nicholson; 24.03.2014

Я всегда просто пишу XML-формат Office 2003 через строки. Это довольно легко сделать и гораздо проще управлять, чем писать и заархивировать то, что составляет xlsx-документ. Также не требуются внешние библиотеки. (хотя можно было запросто накатать самостоятельно)

Кроме того, Excel поддерживает загрузку файлов CSV. Оба символа разделены пробелами или символами. Вы можете либо загрузить его прямо, либо попытаться скопировать и вставить его, а затем нажать кнопку Text-To-Columns в параметрах. Этот вариант, конечно, не имеет ничего общего с python.

person adorablepuppy    schedule 18.04.2011
comment
спасибо .. но не если у меня есть 20 более csv, которые я собираюсь открывать один за другим и делать вырезание и вставку .. хе-хе :) - person siva; 18.04.2011
comment
Чтобы получить пустой файл шаблона, с которым я могу поиграть, я открываю Excel, ввожу «Тест» в A1, затем использую «Сохранить как» в пустой электронной таблице, выбираю XML Spreadsheet 2003 в качестве типа файла и присваиваю ему имя. Вы поймете, что делать, когда увидите для этого структуру XML. - person adorablepuppy; 18.04.2011
comment
Звучит очень интересно! - person Sergio; 19.04.2011

Также доступно в репозитории 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 __name__ == '__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."
person user809695    schedule 16.08.2013

Используйте xlsxwriter для создания и записи в файл Excel на Python.

Установите его: 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()
person Naveen Agarwal    schedule 09.09.2016

Это основано на ответе на ваш ответ. Но я использую xlsxwriter потому, что он принимает больше данных в формате xlsx. Где, поскольку xlwt ограничивает вас 65556 строками и форматом 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()
person Baradwaj Aryasomayajula    schedule 20.07.2017