Подтвердить что ты не робот

Python: создание книги excel и демпинг csv файлов в виде рабочих листов

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

В Googled и найден "pyXLwriter", но, похоже, проект был остановлен. В то время как Im пытается "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"
4b9b3361

Ответ 1

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

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

Ответ 3

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

Кроме того, Excel поддерживает загрузку CSV файлов. Оба ограничителя пробела или символа ограничены. Вы можете либо загрузить его прямо, либо попытаться скопировать и вставить его, а затем нажать кнопку "Текст в столбцы" в параметрах. Конечно, этот параметр не имеет ничего общего с python.

Ответ 4

Также доступен в репозитории 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."

Ответ 5

Используйте 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()

Ответ 6

Это зависит от ответа на ваш ответ. Но причина, по которой я использую 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()