Поиск определенной последовательности букв в строке электронной таблицы 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)

Дай мне знать

Другие вопросы по тегам