Python: конвертировать Excel в CSV - PullRequest
1 голос
/ 14 мая 2019

У меня есть несколько строк кода, которые должны были преобразовать множество таблиц Excel в моем текущем рабочем каталоге в csv файлы.

К сожалению, после запуска этого кода я получил ошибку в строке 21. Что могло привести к этой ошибке? Заранее спасибо.

python
import os
import csv
import openpyxl

for spreadsheet in os.listdir('.'):
    if spreadsheet.endswith('.xlsx'):
        wb = openpyxl.load_workbook(spreadsheet)
        for sheet_name in wb.get_sheet_names():
            sheet = wb.get_sheet_by_name(sheet_name)
            csv_file = open(sheet_name + '.csv', 'w', newline='')
            csv_writer = csv.writer(csv_file)
            for row_num in range(1, sheet.max_row + 1):
                row_data = []
                for col_num in range(1, sheet.max_column + 1):
                    row_data.append(sheet.cell(row=row_num, column=col_num).value)
                for row in row_data:
                    csv_writer.writerow(row)
            csv_file.close()

Я ожидал конвертировать csv файлов. Ниже то, что я получил.

C: \ Users \ User \ Anaconda3 \ Lib \ сайт-пакеты \ ipykernel_launcher.py: 10: DeprecationWarning: вызов устаревшей функции get_sheet_names (Использовать wb.sheetnames).

Удалите CWD из sys.path, пока мы загружаем вещи.

C: \ Users \ User \ Anaconda3 \ Lib \ сайт-пакеты \ ipykernel_launcher.py: 11: DeprecationWarning: вызов устаревшей функции get_sheet_by_name (Use термометр [SheetName]).

Это добавляется обратно InteractiveShellApp.init_path()

Error  Traceback (most recent call last) <ipython-input-29-1b50f926f2e2> in <module>() 
     19 
     20                 for row in row_data:
---> 21                     csv_writer.writerow(row)
     22             csv_file.close()
Error: iterable expected, not int

1 Ответ

0 голосов
/ 14 мая 2019

Подумайте о замене ваших последних строк на:

for row_num in range(1, sheet.max_row + 1):
    row_data = []
    for col_num in range(1, sheet.max_column + 1):
        row_data.append(sheet.cell(row=row_num, column=col_num).value)
    csv_writer.writerow(row_data)
csv_file.close()

Когда вы делаете for row in row_data:, вы в действительности перебираете отдельные значения (которые являются целыми числами)

...