@aCL

Проблемы с участием gspread в python'е

День добрый
Копия моего поста с 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'е? или где? сломал себе всю голову...
  • Вопрос задан
  • 2752 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы