Есть ли более pythonic способ пропустить строки в xlsx?

Что я хочу сделать: Пропустите A1: A6, Пропустите B1: B6 и сохраните остальные в csv. Эквивалентно, я хочу сохранить A7: B+ws.max_row в csv.

Мой подход:

 for sheet_name in wb.get_sheet_names(): sheet = wb.get_sheet_by_name(sheet_name) col1 = [] cnt = 1 for i in sheet['A']: if cnt <= 6: cnt += 1 continue col1.append(i.value) col2 = [] cnt = 1 for i in sheet['B']: if cnt <= 6: cnt += 1 continue col2.append(i.value) data = zip(col1, col2) with open(str(sheet_name)+'.csv','wb') as out: csv_out=csv.writer(out) for row in data: csv_out.writerow(row) 

Что мне не нравится в моем подходе: cnt и вручную выберите A, затем выберите B. (Я хочу пропустить точное количество строк для A и B)

Мой вопрос: есть ли более pythonic способ пропустить строки в xlsx?

openpyxl 2.4 представил метод iter_cols() для рабочих листов (NB. он недоступен для таблиц только для чтения), так что вы можете просто сделать что-то вроде

 cols = {1:[], 2:[]} for idx, col in enumerate(ws.iter_cols(min_col=1, max_col=2, min_row=6), start=1): cols[idx] = [cell.value for cell in col] 

Обратите внимание: пожалуйста, не используйте wb.get_sheet_names() и wb.get_sheet_by_name() поскольку эти методы устарели. wb.sheetnames используйте wb.sheetnames и wb[sheetname] .

Для меня самой простой задачей было просто начать с 7-й строки и итерации по строкам, записывая каждую строку в CSV прямо тогда и там, НЕ используя временную копию. Я не очень хорошо знаю OpenPyXL. С xlrd весь образец кода (все, что вы включили в свой вопрос) будет выражаться как

 for sheet_name in wb.sheet_names(): sheet = wb.sheet_by_name(sheet_name) with open(sheet_name + '.csv', 'wb') as out: csv_out = csv.writer(out) for rx in range(6, sheet.nrows): csv_out.writerow(sheet.row_values(rx, 0, 2)) 

(В этой последней строке вы можете опустить последние два аргумента в row_values() если ваша вся строка состоит из этих двух столбцов. Эти последние два аргумента работают как индексы начала и конца в диапазоне или фрагменте, причем начало включительно и остановка является эксклюзивной .)

Если вам действительно нужны ваши данные, хранящиеся во временной копии, xlrd позволяет вам удобно обращаться к столбцу ячеек за раз:

 data = zip(sheet.col_values(0, 6), sheet.col_values(1, 6)) 

Первый аргумент для col_values() – это индекс столбца, а второй аргумент – индекс начальной строки. (Если вам нужно было остановиться до конца, вы бы предоставили третий аргумент для индекса стоп-строки, как и для row_values() выше).

  • Python openpyxl записывает список в Excel
  • Работа над пределом символов 256 символов в проверке данных в модуле openpyxl
  • Openpyxl max_row и max_column ошибочно сообщают о более крупном размере
  • Работа с openpyxl. составление списка из столбца
  • Добавить индексированные листы в книгу Excel без Openpyxl?
  • получение имен листов из openpyxl
  • Эффективно записывайте данные SPSS в Excel с помощью Python
  • Удалить шестнадцатеричные представления из строк - Python
  • Формат Openplayxl
  • Обновить значение ячейки на основе различных файлов
  • как рисовать линейную диаграмму с датой fomat на excel, используя openpyxl python
  • Давайте будем гением компьютера.