2014-07-24 2 views
2

Когда я сравниваю объекты рабочей книги, которые должны быть одинаковыми, я получаю False, а не True. Вот пример:Сравнение книг openpyxl

$ import openpyxl 
$ w1 = openpyxl.load_workbook('Foo.xlsx') 
$ w2 = openpyxl.load_workbook('Foo.xlsx') 
$ w1 == w2 
False 

Что происходит?

Бонус вопрос: Есть ли способ сравнить книги? (Я пишу модульные тесты для скрипта, который управляет Excel.)

ответ

4

Когда вы вызываете «load_workbook», он создает новый экземпляр объекта рабочей книги openpyxl. Переменная указывает на местоположение в памяти, где хранится этот объект.

Когда у вас есть python для сравнения w1 с w2, он может сравнивать только ссылку на ячейку памяти. Адрес памяти можно увидеть в режиме ожидания, просто набрав имя переменной.

>>> wb1 = load_workbook('master.xlsx') 
>>> wb2 = load_workbook('master.xlsx') 
>>> wb1 == wb2 
False 
>>> wb1 
<openpyxl.workbook.workbook.Workbook object at 0x03ED3B50> 
>>> wb2 
<openpyxl.workbook.workbook.Workbook object at 0x04AD7E30> 

Если вы хотите, чтобы убедиться, что одна книга такая же, как другой вам нужно будет написать свой собственный код, который выглядит глубже в каждый объект. Один из способов сделать это - использовать хэш. (См .: https://stackoverflow.com/a/16876405/2535649)

+1

Это полезно и поставило меня в правильном направлении. Я написал что-то, что превращает книги в словари, а затем сравнивает их. – twsh

+1

@ Сравнивать книги в целом довольно сложно. Вы должны указать, какие части книг вы хотите сравнить: одинаковы, если у вас есть листы с одинаковыми именами? Должны ли рабочие листы быть одинаковыми? и т. д. –

+0

@ user2385133 Я хотел, чтобы результат был «True», если у них было такое же количество листов с одинаковыми именами и одинаковым содержимым. (Но в контексте я хотел написать тест, я рад предположить, что оба имеют один лист с тем же именем.) – twsh

 Смежные вопросы

  • Нет связанных вопросов^_^