我想编写一个Python脚本,该脚本读入Excel电子表格并将其部分工作表保存为CSV文件。
我该怎么做?
我发现third-party modules用于从Python读取和编写Excel文件,但据我所知,他们只能以Excel(即* .xls)格式保存文件。如果我在这里错了,一些示例代码显示如何做我正在尝试用这些模块做的事情将不胜感激。
我也遇到one solution,我不太明白,但似乎是Windows特有的,因此无论如何都不会帮助我,因为我想在Unix中这样做。无论如何,我不清楚这个解决方案可以扩展到我想做的事情,即使在Windows下也是如此。
答案 0 :(得分:36)
使用逐行描述的两个库的最基本的例子:
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)
使用xlrd
或openpyxl
模块分别读取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')