#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]