Как напечатать строку с пропущенными пустыми столбцами?

#python #excel #xlrd

#python #excel #xlrd

Вопрос:

Я пытаюсь распечатать строку заголовков из Excel, но некоторые поля пустые, хотя в самом столбце есть записи данных.
Я хочу печатать только столбцы, у которых нет пустого заголовка. Прямо сейчас я просто пытаюсь заставить программу печатать заголовки, которые не являются пустыми, но я не могу понять, как это сделать.
Я новичок в Python, поэтому многое из этого не кажется мне очевидным.

Вот мой код для простой попытки получить заголовки:

 import xlrd
import xlwt

book = xlrd.open_workbook("file.xlsx")
sheet = book.sheets()[0]
r = sheet.row(0)

print(r)
 

Это печатает каждое значение в строке, но пустые отображаются как , empty: , и это те, которые я хочу исключить.

Когда я пытаюсь использовать этот бит для печати только непустых строк:

 for row in range(r):
    if r is not None:
        print(r)
 

Я получаю сообщение об ошибке, которое a 'list' object can't be interpreted as an integer .

Ответ №1:

range Объект в Python — это объект, который создает повторяющийся диапазон целых чисел. Например, вы можете сделать for i in range(100): , и цикл будет повторяться по каждому целому числу между 0 и 100 .

row Функция уже возвращает последовательность Cell объектов, которая сама по себе является итеративной. Чтобы повторить это, просто выполните for cell in row: .

Объекты в строке никогда None не находятся, поэтому проверка row is not None не приведет к удалению пустых ячеек. Пустые ячейки являются одиночными, то есть существует только один экземпляр пустой ячейки, все остальные экземпляры не являются пустыми. Правильный способ проверить, пуста ли ячейка::

 from xlrd.sheet import empty_cell

if cell is empty_cell:
 

Подробный способ добиться того, чего вы хотите, заключается в следующем:

 for cell in row:
    if cell is not empty_cell:
        print cell
 

Используя понимание списка, это можно упростить до одной строки:

 print [cell for cell in row if cell is not empty_cell]