Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 46

Редактирование списков на полках (shelve)

15.07.2015, 18:56. Показов 1677. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, вынужден опять к Вам обратиться за помощью, уж простите.
Хочу организовать полки. И все бы хорошо, если бы на полки клал не списки, к которым должны прибавляться новые списки или удаляться старые.
Вопрос в чем.

Python
1
2
3
4
5
6
7
8
9
10
11
12
import shelve
file = shelve("name.dat","c")
name = input("name: ") #name будет ключем
obj = input("obj: ")     ##
num = input("num: ")  ## элементы списка
dog = input("dog: ")    ##
dat = [num,obj,dog]
lis = [] #Чтобы содержимое полки выглядело как 'name':[[список1],[список2]...[списокN]]
lis.append(dat)
file[name]=lis
file.sync()
file.close()
И тут вроде все хорошо, содержимое при вызове ключа вижу, но это все работает в формате

'name1':[...]
'name2':[...]
А мне нужно помимо этого добиться добавления в, например - name1 еще N-список.
Я наивно полагал, что будет работать
Python
1
file[name].append(новый список)
Но нет. Строка принимается, ошибки не возвращает, но список не добавляет. Ну и логично, что первый код - "одноразовый", потому что при повторном запуске кода, мы снова получаем lis=[] и как следствие - пустой список... То есть предварительно надо прочесать имеющийся файл.

Спасайте, только не ругайтесь

Добавлено через 4 минуты
Чтобы уйти от обнуления списка (lis=[]) я строил конструкцию
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import shelve
file = shelve("name.dat","c")
name = input("name: ") #name будет ключем
if name in file:
   obj = input("obj: ")     ##
   num = input("num: ")  ## элементы списка
   dog = input("dog: ")    ##
   dat = [num,obj,dog]
##И вот тут возникает вопрос - как вытащить список из существующего файла с полки name и дописать в него список =) 
else:
   lis = [] #Чтобы содержимое полки выглядело как 'name':[[список1],[список2]...[списокN]]
   lis.append(dat)
   file[name]=lis
   file.sync()
   file.close()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2015, 18:56
Ответы с готовыми решениями:

Редактирование выпадающих списков в UserForm
Доброго времени коллеги, подскажите пожалуйста, почему при редактировании строки не получается реализовать такие моменты. Стаем на строку...

Составление и редактирование однонаправленых списков
Данный список А, состоящий из записей: первое поле - вещественное число, второе - адрес следующего элемента. Составить программу для...

Редактирование списков через бизнес-процессы
Есть список в котором указаны остатки бумаги. И есть необходимость создать бизнес процесс которой будет вычитать изменить количество бумаги...

4
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
15.07.2015, 19:04
Цитата Сообщение от rust-resisting Посмотреть сообщение
Хочу организовать полки.
WTF!?!?! какие ещё полки?

Добавлено через 3 минуты
В качестве значений у тебя хранятся списки и ты хочешь добавлять в эти списки новые значения, так?
0
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 46
15.07.2015, 19:05  [ТС]
Цитата Сообщение от alex925 Посмотреть сообщение
WTF!?!?! какие ещё полки?
оу оу оу... простите это наследие царского режима (с), а именно книжки, которую Вы назвали бездарной (Майкл Доусон)

Добавлено через 1 минуту
Цитата Сообщение от alex925 Посмотреть сообщение
В качестве значений у тебя хранятся списки и ты хочешь добавлять в эти списки новые значения, так?
я хочу в качестве значений хранить списки, то есть добавлять не в списки значения, а добавлять новые списки в качестве значений
'n':[список],[список]...[список]
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
15.07.2015, 19:08
Цитата Сообщение от rust-resisting Посмотреть сообщение
то есть добавлять не в списки значения, а добавлять новые списки в качестве значений
Тогда в качестве значения хранишь список и внутрь него кидаешь новые списки и все в общем-то.
0
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 46
15.07.2015, 19:28  [ТС]
Цитата Сообщение от alex925 Посмотреть сообщение
Тогда в качестве значения хранишь список и внутрь него кидаешь новые списки и все в общем-то.
простите меня вот делаю все правильно, затыкаюсь где-то, туплю, задаю вопрос, а потом сам себе на него отвечаю.
Я же так и делал - значением сохранял список, в который потом не понимал как накинуть еще списков... пока не вспомнил, как вызвать содержимое ключа

Python
1
2
3
4
5
new=[новый список]
a = file[name]
a.append(new)
file[name]=a
file.sync()
вопрос свой дольше задавал... ну простите, заклинило
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2015, 19:28
Помогаю со студенческими работами здесь

Shelve
как сделать перевод с Русского на анлийский с помощью Shalve?

Shelve не обновляет данные
Доброе время суток. Есть два модуля, модуль А создает объект shelve и хранит там данные. db = shelve.open('database') db =...

Не работает хранилище shelve
я создал простенькое хранилище shelve, но когда я его запускаю в интерактивной подсказке у меня показывается что оно пустое. вот код...

Не работает shelve в Jython
Подскажите он там впринципе вырезан или надо как-то правильно его уметь готовить?

Сохранение самого файла в shelve
привет всем, я написал скрипт который сохраняет все mp3(например) файлы в shelve файл, но когда я скопирию его на другой комп и открою он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru