我想编写一个Python脚本,该脚本读入Excel电子表格并将其部分工作表保存为CSV文件.
我怎样才能做到这一点?
我找到了用于从Python读取和编写Excel文件的第三方模块,但据我所知,它们只能以Excel(即*.xls)格式保存文件.如果我在这里错了,一些示例代码显示如何做我正在尝试用这些模块做的事情将不胜感激.
我也遇到了一个我无法理解的解决方案,但似乎是特定于Windows的,因此无论如何都不会帮助我,因为我想在Unix中这样做.无论如何,我不清楚这个解决方案可以扩展到我想做的事情,即使在Windows下也是如此.
Bou*_*oud 44
使用两个库逐行描述的最基本的例子:
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))
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
jtl*_*lz2 16
截至 2021 年 12 月和 Python 3:
\nAPIopenpyxl已经发生了足够的变化(请参阅https://openpyxl.readthedocs.io/en/stable/usage.html),我已经通过 @Boud (现在是 @Zeugma?)更新了这部分答案,如下所示:
import openpyxl\nimport csv\n\nwb = openpyxl.load_workbook(\'test.xlsx\')\nsh = wb.active # was .get_active_sheet()\nwith open(\'test.csv\', \'w\', newline="") as file_handle:\n csv_writer = csv.writer(file_handle)\n for row in sh.iter_rows(): #\xc2\xa0generator; was sh.rows\n csv_writer.writerow([cell.value for cell in row])\nRun Code Online (Sandbox Code Playgroud)\n@Leonid 提出了一些有用的评论 - 特别是:
\ncsv.writer提供一些附加选项,例如自定义分隔符:
csv_writer = csv.writer(fout, delimiter=\'|\', quotechar=\'"\', quoting=csv.QUOTE_MINIMAL)\nRun Code Online (Sandbox Code Playgroud)\n华泰
\nFab*_*enP 13
使用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)
Run Code Online (Sandbox Code Playgroud)