18

我有几个 csv 文件,我想将它们作为新工作表转储到 excel 工作簿(xls/xlsx)中。我如何实现这一目标?

谷歌搜索并找到“pyXLwriter”,但似乎该项目已停止。当我尝试“pyXLwriter”时想知道是否有任何替代/建议/模块?

非常感谢。

[编辑]

这是我的解决方案:(有人有更精简、更 Python 的解决方案吗?请发表评论。谢谢)

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

6 回答 6

28

不知道所说的“更精简,更 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")
于 2011-04-25T10:36:57.237 回答
12

你会在这个xlwt 教程中找到你需要的一切。这个库(xlrd 和 xlwt)是在 Python 中管理 Excel 交互的最流行的选择。缺点是,目前它们只支持 Excel 二进制格式 (.xls)。

于 2011-04-18T16:27:36.460 回答
4

使用 xlsxwriter 在 python 中创建和写入 excel 文件。

通过以下方式安装它: 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()
于 2016-09-09T17:36:52.487 回答
3

我总是只是通过字符串编写 Office 2003 XML 格式。与编写和压缩构成 xlsx 文档的内容相比,这很容易做到,也更容易管理。它也不需要任何外部库。(尽管人们可以很容易地自己动手)

此外,Excel 支持加载 CSV 文件。空格分隔或字符分隔。您可以直接加载它,也可以尝试复制并粘贴它,然后按选项中的“文本到列”按钮。当然,这个选项与 python 无关。

于 2011-04-18T16:19:28.373 回答
3

也可在 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."
于 2013-08-16T21:34:11.753 回答
1

这是基于您的答案本身的答案。但我使用 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()
于 2017-07-20T18:32:30.713 回答