Python:创建Excel工作簿并将CSV文件作为工作表导入

18 投票
6 回答
32446 浏览
提问于 2025-04-16 15:58

我有几个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"

6 个回答

4

使用 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()
12

你可以在这个xlwt 教程中找到你需要的所有信息。这些库(xlrd 和 xlwt)是用Python处理Excel文件时最受欢迎的选择。不过,目前它们只支持Excel的二进制格式(.xls)。

28

我不太明白你说的“更简洁,更符合Python风格”是什么意思,不过你确实可以让它看起来更好一些:

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

撰写回答