27

我想编写一个 Python 脚本来读取 Excel 电子表格并将其一些工作表保存为 CSV 文件。

我怎样才能做到这一点?

我找到了用于从 Python 读取和写入 Excel 文件的第三方模块,但据我所知,它们只能以 Excel(即 *.xls)格式保存文件。如果我在这里错了,一些示例代码将不胜感激,这些示例代码显示了我正在尝试对这些模块执行的操作。

我还遇到了一种我不太理解的解决方案,但似乎是特定于 Windows 的,因此无论如何都对我没有帮助,因为我想在 Unix 中执行此操作。无论如何,我不清楚这个解决方案是否可以扩展为我想做的事情,即使在 Windows 下也是如此。

4

5 回答 5

55

使用这两个库的最基本示例逐行描述:

  1. 打开 xls 工作簿
  2. 参考第一个电子表格
  3. 以二进制打开写入目标 csv 文件
  4. 创建默认的 csv writer 对象
  5. 遍历第一个电子表格的所有行
  6. 将行转储到 csv

import xlrd
import csv

with xlrd.open_workbook('a_file.xls') as wb:
    sh = wb.sheet_by_index(0)  # or wb.sheet_by_name('name_of_the_sheet_here')
    with open('a_file.csv', 'wb') as f:   # open('a_file.csv', 'w', newline="") for python 3
        c = csv.writer(f)
        for r in range(sh.nrows):
            c.writerow(sh.row_values(r))

import openpyxl
import csv

wb = openpyxl.load_workbook('test.xlsx')
sh = wb.active
with open('test.csv', 'wb') as f:  # open('test.csv', 'w', newline="") for python 3
    c = csv.writer(f)
    for r in sh.rows:
        c.writerow([cell.value for cell in r])
于 2012-05-29T16:36:26.100 回答
18

使用pandas会更短一些:

import pandas as pd

df = pd.read_excel('my_file', sheetname='my_sheet_name')  # sheetname is optional
df.to_csv('output_file_name', index=False)  # index=False prevents pandas to write row index

# oneliner
pd.read_excel('my_file', sheetname='my_sheet_name').to_csv('output_file_name', index=False)
于 2017-07-25T08:09:21.183 回答
9

截至 2021 年 12 月和 Python 3:

openpyxlAPI 已经发生了很大的变化(请参阅https://openpyxl.readthedocs.io/en/stable/usage.html),我已经通过@Boud(现在是@Zeugma?)更新了这部分答案,如下所示:

import openpyxl
import csv

wb = openpyxl.load_workbook('test.xlsx')
sh = wb.active # was .get_active_sheet()
with open('test.csv', 'w', newline="") as file_handle:
    csv_writer = csv.writer(file_handle)
    for row in sh.iter_rows(): # generator; was sh.rows
        csv_writer.writerow([cell.value for cell in row])

@Leonid 提出了一些有用的评论 - 特别是:

csv.writer提供了一些额外的选项,例如自定义分隔符:

csv_writer = csv.writer(fout, delimiter='|', quotechar='"', quoting=csv.QUOTE_MINIMAL)

高温高压

于 2020-09-28T09:32:26.690 回答
5

使用xlrd oropenpyxl模块分别读取 xls 或 xlsx 文档,使用csv模块进行写入。

或者,如果使用Jython,您可以使用Apache POI库来读取.xls.xlsx,并且本机 CSV 模块仍然可用。

于 2012-05-29T15:47:00.430 回答
0

首先将您的 Excel 电子表格读入 Pandas。OrderedDict下面的代码会将您的 Excel 电子表格作为包含所有工作表的文件导入 Pandas DataFrames。然后,只需使用worksheet_nameas 键将特定工作表作为 a 访问,DataFramecsv使用df.to_csv(). 希望这将适用于您的情况。

import pandas as pd
df = pd.read_excel('YourExcel.xlsx', sheet_name=None)
df['worksheet_name'].to_csv('output.csv')  
于 2019-08-01T17:30:17.987 回答