Как сохранить таблицу 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)