Есть ли более 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 изменить шрифт на полужирный
  • Как вставить разрыв страницы в openpyxl
  • передавать данные openpyxl в pandas
  • Использование python для добавления текстового файла в существующую книгу Excel
  • Открытые таблицы Openpyxl и Hidden / Unhidden Excel
  • Изменение и создание xlsx-файлов с помощью Python, в частности форматирование отдельных слов предложения eg в ячейке
  • Python openpyxl save xlsm-файл получает ошибку при открытии
  • Есть ли способ получить название рабочей книги в openpyxl
  • Возможно ли перезаписать существующие данные в файле .xlsx с помощью openpyxl?
  • итерация по всем строкам в определенном столбце openpyxl
  • Как читать несколько текстовых файлов по строкам и отправлять excel, перемещаясь в новый столбец после каждого файла?
  • Interesting Posts

    Excel VBA: как найти * вторую последнюю строку * с * контентом *?

    Excel VBA – копирование и вставка новых данных / строк

    Не удалось открыть файл excel с помощью Process.Start () в .Net4.0

    VBA: разрыв страницы только после определенных строк

    Средняя функция на VBA

    Нужны совпадения между двумя диапазонами, которые будут добавлены в третий диапазон с VBA

    Запуск Excel Macro через VBA в Acces

    excel fix значение столбца, изменить значение строки, непересекающуюся строку

    Ошибка при совместном суммировании двух столбцов

    Excel VBA: диапазон соответствует условиям

    Скопируйте данные в три ячейки Excel и вставьте в четвертый цвет шрифта, измененный для каждого из трех

    Как я могу динамически добавить ДА или НЕТ CheckBoxes в UserForm?

    Ошибка времени выполнения при копировании с одного листа на другой

    Как перечислять все программы, которые могут открывать XML-файл в виде обычного текста?

    Формула для расчета временных рамок

    Давайте будем гением компьютера.