如何将Excel工作表另存为CSV

时间:2012-05-29 15:44:35

标签: python excel csv

我想编写一个Python脚本,该脚本读入Excel电子表格并将其部分工作表保存为CSV文件。

我该怎么做?

我发现third-party modules用于从Python读取和编写Excel文件,但据我所知,他们只能以Excel(即* .xls)格式保存文件。如果我在这里错了,一些示例代码显示如何做我正在尝试用这些模块做的事情将不胜感激。

我也遇到one solution,我不太明白,但似乎是Windows特有的,因此无论如何都不会帮助我,因为我想在Unix中这样做。无论如何,我不清楚这个解决方案可以扩展到我想做的事情,即使在Windows下也是如此。

5 个答案:

答案 0 :(得分:36)

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

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

  7. 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.get_active_sheet()
    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])
    

答案 1 :(得分:9)

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

答案 2 :(得分:4)

使用xlrdopenpyxl模块分别读取xls或xlsx文档,以及要写入的csv模块。

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

答案 3 :(得分:2)

截至2020年10月和Python 3:

openpyxl API进行了足够的更改(请参阅https://openpyxl.readthedocs.io/en/stable/usage.html),以至于我已经通过@Boud更新了答案的这一部分,如下所示:

import openpyxl
import csv

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

HTH

答案 4 :(得分:0)

首先将Excel电子表格读入Pandas。下面的代码会将您的Excel电子表格作为OrderedDict导入Pandas,其中包含您所有的工作表为DataFrames。然后,只需使用worksheet_name作为密钥即可以DataFrame的形式访问特定的工作表,并使用csv仅将所需的工作表另存为df.to_csv()文件。希望这对您有用。

import pandas as pd
df = pd.read_excel('YourExcel.xlsx', sheet_name=None)
df['worksheet_name'].to_csv('output.csv')