Как сохранить таблицу Excel в формате CSV
Я хочу написать Python script, который читается в электронной таблице Excel и сохраняет некоторые его листы в виде файлов CSV.
Как я могу это сделать?
Я нашел сторонние модули для чтения и записи файлов Excel с Python, но, насколько я могу судить, они могут только сохранять файлы в формате Excel (т.е. *.xls). Если я ошибаюсь здесь, вам будет оценен некоторый пример кода, показывающего, как делать то, что я пытаюсь сделать с этими модулями.
Я также встретил одно решение, которое я не могу понять, но, похоже, зависит от Windows, и поэтому мне все равно не помогло, так как я хочу сделать это в Unix. Во всяком случае, мне не ясно, что это решение можно расширить, чтобы делать то, что я хочу делать, даже под Windows.
Ответы
Ответ 1
Наиболее простые примеры, использующие две библиотеки, описываются по строкам:
- Откройте рабочую книгу xls
- Ссылка на первую таблицу
- Открыть в двоичном файле файл csv target.
- Создать объект записи csv по умолчанию
- Перебирать все строки первой таблицы
- Дамп строк в 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.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])
Ответ 2
Используйте xlrd
или openpyxl
модуль для чтения документов xls или xlsx соответственно, а csv
модуль для записи.
В качестве альтернативы, если вы используете Jython, вы можете использовать Apache POI библиотека для чтения либо .xls
или .xlsx
, и собственный CSV-модуль будет по-прежнему доступен.
Ответ 3
Использование 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)