Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80

Консервация файла (pickle)

21.07.2016, 08:38. Показов 5359. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как можно расконсервировать (unpickling) всё содержимое файла .dat ?
В моём коде при каждом запуске программы в файл дописываются данные, как и надо. А чтение происходит только первого кортежа.
Python
1
2
3
4
5
6
7
8
9
10
11
12
name = input("Ваше имя:  ")
score = 4
import pickle
a = (name, score)
file = open("list.dat", "ab")
pickle.dump(a, file)
file.close()
 
file = open("list.dat", "rb")
spisok = pickle.load(file)
print(spisok)
file.close()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.07.2016, 08:38
Ответы с готовыми решениями:

Консервация в Pickle и модуль xlwt
И снова здрасти. У меня два вопроса. Первый по Pickle: есть у меня программа, которая в конце генирирует два листа с матрицами (класс...

Запись и чтение из бинарного файла списка из bool значений БЕЗ МОДУЛЯ pickle
У меня есть список из bool-переменных, и я хочу как то записать его в бинарный файл, не используя pickle. При этом, что бы я мог потом...

Консервация ОС и амортизация
30.06.07 перевожу ОС на консервацию. Пробовала сделать 2мя способами: 1 - просто изменяя состояние в справочнике, 2 - документом...

13
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.07.2016, 09:16
Вот тут все есть
http://pythonworld.ru/moduli/modul-pickle.html
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
21.07.2016, 09:52  [ТС]
alex925, в твоей ссылке не сказано как загрузить все данные из файла.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.07.2016, 10:50
Franek, а Вы точно читали по ссылке?

Добавлено через 10 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> name = input("your name: ")
your name: jabbson
>>> name
'jabbson'
>>> score = 4
>>> import pickle
>>> f = open('list.dat', 'ab')
>>> pickle.dump((name, score), f)
>>> pickle.dump((name, score+1), f)
>>> f.close()
>>>
>>>
>>> f = open('list.dat', 'rb')
>>>
>>> pickle.load(f)
('jabbson', 4)
>>> pickle.load(f)
('jabbson', 5)
>>> pickle.load(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
EOFError: Ran out of input
>>>
>>> f.close()
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.07.2016, 11:04
Franek, все сказано, если внимательно посмотреть.
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
21.07.2016, 11:29  [ТС]
Jabbson, alex925, Спасибо за желание помочь. Понимаю, что если повторить pickle.load, то будет следующая загрузка. Я не пользовался этим, так как Питон выдаёт ошибку в случае если данных меньше, чем требований загрузить.
Подсказали, что можно с помощью цикла, все работает:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name = input("AAA  ")
score = 6
import pickle
spisok = [name, score]
file = open("list.dat", "ab")
pickle.dump(spisok, file)
file.close()
 
spisok = []
with open("list.dat", "rb") as file:
    while True:
        try:
            spisok.append(pickle.load(file))
        except EOFError:
            break
print(spisok)
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.07.2016, 12:29
Franek, если ты хочешь сохранить в файле несколько объектов то залей их все в 1 объект (список, словарь и т д) и сохраняй его в файле. Потом при извлечении данных ты загрузишь из файла свой 1 корневой объект и из него уже извлечешь все остальное.
1
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
21.07.2016, 18:27  [ТС]
alex925, попробовал как ты пишешь. Хотел сделать 1 список, состоящий из кортежей двухэлементных и сохранить в файле. Но при каждом запуске программы Питон читает объявление списка пустым. spisok = []. Это ведь нужно обязательно. Получается в файле хранится не список из кортежей, а просто кортежи один за другим.
Программа не читает все кортежи, а только первый. Почему?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name = input("AAA  ")
score = 6
cort = (name, score)
import pickle
spisok = []
spisok.append(cort)
file = open("list.dat", "ab")  
pickle.dump(spisok, file) # Запись в файл
file.close()
 
file = open("list.dat", "rb") 
new = pickle.load(file) # Чтение из файла
print(len(new))
for i in range(len(new)):
    print(new[i])
file.close()
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.07.2016, 18:30
Цитата Сообщение от Franek Посмотреть сообщение
Но при каждом запуске программы Питон читает объявление списка пустым. spisok = []. Это ведь нужно обязательно. Получается в файле хранится не список из кортежей, а просто кортежи один за другим.
Чта? Что за бред?
0
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
21.07.2016, 18:32  [ТС]
alex925, наверное ошибся. В файле хранятся списки, а не кортежи.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.07.2016, 18:38
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pickle
 
name = input('Введите имя: ')
score = 6
data = [(name, score), ('some value', 'some value')]
with open("list.dat", "wb") as out:
    pickle.dump(data, out)
 
 
with open("list.dat", "rb") as inp:
    from_file = pickle.load(inp)
    
print(len(from_file))
for i in from_file:
    print(i)
1
2 / 2 / 1
Регистрация: 01.06.2016
Сообщений: 80
21.07.2016, 18:56  [ТС]
alex925, спасибо. А можно сделать чтобы чтение было всех данных из файла, включая оставшихся из прошлых запусков программы? В твоём коде в функции open я заменил аргумент на "дозапись", но программа читает только данные самого первого запуска, я так понял самую первую строку.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.07.2016, 20:15
Franek, можно, пару строк поменять только. Считываешь сначала данные, потом добавляешь, что необходимо в уже существующие данные и записываешь в файл. Алгорим уровня детский сад.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
24.07.2016, 22:53
Franek, вот здесь Получить все объекты из файла чем-то подобным озадачивался. Последний пост в принципе можно назвать решением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2016, 22:53
Помогаю со студенческими работами здесь

Pickle Python3
Добрый вечер. Задача следующая. Я записываю в файл с помощью pickle.dump() несколько строк. Мне нужно считать сохранённые в файле строки и...

json и pickle
Как можно добавить возможность классу упаковки и распаковки данных с использованием json и pickle?

Модуль pickle
Код адресной книги. Все четко работало. Скопировал код и начал проводить манипуляции. Когда запустил копию измененного кода,то перестал...

Pickle и VK API
Пишу небольшого чат - бота для своей группы ВК, файлы храню на pythonanywhere.com За сообщения отвечают две функции : def...

Pickle.close() - не работает
Код:&gt;&gt;&gt; import sys &gt;&gt;&gt; sys.version '3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) ' &gt;&gt;&gt; D = {'a':1, 'b':2} &gt;&gt;&gt; import pickle ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru