Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973

Получить все объекты из файла

08.07.2015, 01:51. Показов 2459. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Вопрос такой: есть файл, в который с помощью pickle.dump() было сохранено какое-то количество объектов. Допустим
Python
1
2
3
4
5
6
>>> import pickle
>>> f = open('some_file', 'wb')
>>> for s in ('any', 'many', 'money', 'more'):
...   pickle.dump(s, f)
... 
>>> f.close()
Как их теперь оттуда вытащить все, сколько бы их там ни было? Единственное, что у меня отработало:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> f = open('some_file', 'rb')
>>> while True:
...   try:
...     s = pickle.load(f)
...   except EOFError:
...     break
...   else:
...     print(s)
... 
any
many
money
more
>>>
но как-то не комильфо по-моему...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2015, 01:51
Ответы с готовыми решениями:

Получить не все сериализованные объекты, а, например, первых 3
Познакомился с сериализацией объектов в C#. Узнал что несколько объектов можно сериализовать, добавив их в список и сериализовав сам...

Как получить все объекты другого объекта?
У меня есть объект в котором есть другие, они все имеют свою структуру, но общую переменную Num, вот мне им нужно и присвоить каждому Num. ...

Получить из html кода все объекты с определенным class
Всем привет! Есть html код, в котором перечисляются строки под тегом <div> Пример: <div class="cnt-column"> ...

7
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.07.2015, 02:13
Ну напишите в самое начало файла счетчик, если так будет лучше
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
08.07.2015, 02:28  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
Ну напишите в самое начало файла счетчик, если так будет лучше
Ещё бы знать, сколько там всего будет. Как вариант, можно было бы всё в один список запихнуть, да так и сохранить.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> f = open('some_file', 'wb')
>>> l = ['any', 'many', 'money', 'more']
>>> pickle.dump(l, f)
>>> f.close()
>>> f = open('some_file', 'rb')
>>> for s in pickle.load(f):
...   print(s)
... 
any
many
money
more
>>>
Проблема в том, что программа, создающая файл, по мере своей работы отправляет в него заранее непредсказуемое (но не астрономических масштабов) количество объектов.

Собственно так и сделал (отправил список в файл), но всё-таки интересно, можно как-то итератор на содержимое такого файла получить?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.07.2015, 03:05
Есть такой костыль, но не уверен, что так лучше:
Python
1
2
3
4
while f.read(1):
    f.seek(-1,1)
    s = pickle.load(f)
    print(s)
Можно еще в конце писать файл какой-то специфичный объект-терминатор и проверять
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.07.2015, 06:40
Может как вариант лучше использовать http://python-3.ru/page/module-shelve-python
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
08.07.2015, 09:55  [ТС]
alex925, у меня там свалка однотипных объектов, пускай списком сохраняются, так проще.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
08.07.2015, 10:35
Цитата Сообщение от easybudda Посмотреть сообщение
пускай списком сохраняются
Ну против такого враинта ничего против не имею, просто это на тот случай если пытаться сохранять их по отдельности с помощью pickle.
Если честно вообще раньше не думал, что pickle может втиснуть в файл несколько объектов. Всегда почему-то надо было хранить ток 1 объект.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
10.07.2015, 01:26  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
можно как-то итератор на содержимое такого файла получить?
Поделка из кружка "Очумелые ручки", но работает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> def get_obj(fn):
...   while True:
...     try:
...       yield pickle.load(fn)
...     except EOFError:
...       return
... 
>>> f = open('multy_objs', 'rb')
>>> for o in get_obj(f):
...   print(o)
... 
any
many
money
more
>>>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2015, 01:26
Помогаю со студенческими работами здесь

С файла считываются не все объекты
Записывается файл так: void CreateNewPerson() { HANDLE hFile = CreateFile( L"base.dat", // Filename ...

Как получить все объекты, поля которых используют определенный аттрибут?
То есть у меня есть свой аттрибут TestAttribute, он используется только в наследниках класса Test (который в свою очередь унаследован от...

Можно ли получить все объекты указанного класса, обратившись к их общему родителю?
Добрый день! Пишу что-то вроде фраймворка для разработки скриптов в одной пригодной для этого игре. Сделал шаблон, обозначил классы. Но...

Найти все одинаковые объекты с одинаковым свойством и получить имя объекта
Здравствуйте! В терминологии разбираюсь не особо, поэтому вопрос опишу, как понимаю сам. Имеется программа, которая генерирует пиксели...

Не могу нормально считать все объекты класса из файла
#include <iostream> #include<fstream> #include<string> using namespace std; class Bank_accounts // имя класса { char...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru