День добрый
Копия моего поста с python.su :)
Вступление:
Есть Google Таблица (далее просто таблица), столбцы Номер , Баланс, и ещё ряд ячеек
Есть скрипт. В нем реализован класс параметров номера, в т.ч. атрибуты row (номер строки, в которой находится номер в таблице) и cells (список ячеек таблицы, находящиеся на той же строке, что и номер)
Есть словарь base, в котором ключ - это номер телефона, а значение - экземпляр класса параметров номера.
Использую модуль gspread.
wks_range - список всех ячеек таблицы. Один элемент списка - это экземпляр класса gspread.cell с атрибутами row,cell и value. Если вывести на экран один из элементов списка, выглядеть будет так:
Очевидно, R - номер строки, в которой находится ячейка, C - номер столбца, строка - значение ячейки
Часть скрипта:
for num in base.keys():
for cell in wks_range:
if base[num].row==cell.row:
base[num].cells.append(cell)#ячейки, относящиеся к номеру
Предполагается, что максимальная длина списка base.cells не может быть больше 4. По факту список cells экземпляров класса (предполагаю, что на всех номерах - во время тестов проверял один случайно выбранный ключ ) содержит все ячейки таблицы.
Если в интерактивном режиме, после отработки скрипта, проверки и обнаружения ошибки запустить следующее:
>>> for num in base.keys():
base[num].cells=[]
>>> for num in base.keys():
for cell in wks_range:
if base[num].row==cell.row and base[num].row!=None:
base[num].cells.append(cell)
if len(base[num].cells)>4:
print(num)
То результатов никаких не выводится, т.е. в интерактивном режиме максимальная длина списка такая, какая и должна быть.
Ещё нюансы:
for num in list(base.keys())[:30]:
for cell in wks_range:
if base[num].row==cell.row:
base[num].cells.append(cell)
Вывожу результат (часть убрана):
>>> base['9030064337'].cells
[<Cell R220C1 '9037551123'>, <Cell R220C2 '-1782.88'>, <Cell R220C3 None>, <Cell R220C4 None>, <Cell R51C1 '9030064337'>, <Cell R51C2 '-5003.47'>, <Cell R51C3 None>, <Cell R51C4 None>, <Cell R130C1 '9055669265'>...
и практически тот же самый код, только не append, а print:
...
if base[num].row==cell.row:
print('{} {} {}'.format(num,base[num].row,cell))
9030064337 51 <Cell R51C1 '9030064337'>
9030064337 51 <Cell R51C2 '-5003.47'>
9030064337 51 <Cell R51C3 None>
9030064337 51 <Cell R51C4 None>
какая-то проблема в append'е? или где? сломал себе всю голову...