Поиск определенной последовательности букв в строке электронной таблицы Excel с использованием Python 2.7 и xlrd
Я только начал использовать xlrd в Python 2.7.12 и не могу понять, что я делаю неправильно; похоже на несоответствие типов данных.
По сути, я ищу в электронной таблице Excel (.xlsx) последовательность букв в серии строк шириной в два столбца, и, если она будет найдена, я хотел бы скопировать всю эту строку в новую электронную таблицу.
Данные в электронной таблице выглядят так...
R1: TheName_of_the_thing_XYZQ , Description of the thing with keyword1
R1: TheName_of_another_thing_61PD , Description of the thing with keyword2
И вот что у меня так далеко...
import xlrd
search_for = ['XYZQ', 'keyword2', 'foo', 'FOO']
book = xlrd.open_workbook('csv-test.xlsx')
i = 0
j = 0
sheet1 = book.sheet_by_index(1)
for i in range(sheet1.nrows):
row = sheet1.row_values(i)
for j in range(len(row)):
if row[j] == search_for:
print 'found it!'
else:
print 'sorry'
Когда я запускаю это, он ничего не находит в search_for, просто печатает "извините" для каждой строки.
Так что я знаю, что он открывает правильный документ, анализирует каждую строку и т. Д. Я также пробовал cell_value и row_slice.
Спасибо!
1 ответ
Я думаю, что ваша ошибка в этих строках:
if row[j] == search_for:
В твоем случае, row[j]
это содержимое ячейки в формате Unicode, а search_for это список, объявленный в начале.
Другими словами, у вас есть такая ситуация, например:
if u'TheName_of_the_thing_XYZQ' == ['XYZQ', 'keyword2', 'foo', 'FOO']:
и не работает.
Я изменил ваш скрипт как следующий цикл внутри searc_for
список и проверка, содержит ли одна ячейка один из элементов списка.
import xlrd
search_for = ['XYZQ', 'keyword2', 'foo', 'FOO']
book = xlrd.open_workbook('test.xlsx')
sheet = book.sheet_by_index(0)
for idx in range(sheet.nrows):
row = sheet.row_values(idx)
name = row[0]
description = row[1]
print "==== row number {} ====".format(idx + 1)
for key in search_for:
if key in name:
print "in 'name' column, found {}".format(name)
if key in description:
print "in 'description' column, found {}".format(name)
Дай мне знать