Уведомления

Группа в Telegram: @pythonsu

#1 Март 31, 2018 21:25:16

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль pickle

Добрый день.
Есть некий словарь. Задача записать его в файл.

 
import pickle
data ={'key1': 'item1',
'key2': 'item2',
'key3': 'item3',
'key4': 'item4',
'key5': 'item5'}
with open('data.txt', 'wb') as f:
pickle.dump(data, f)
В результате создается текстовый файл data.txt внутри которого байтовое представление моего исходного словаря (поправьте если не прав). Если читать этот файл питоном все хорошо, но без питона - проблема. Я открываю этот файл SublimeText'ом - вижу строки байтов. Если открыть блокнотом, то он (блокнот) по видимому пытается перевести мой файл в юникод и терпит неудачу (см скрин). Есть возможность создать файл так, чтобы его потом можно было открыть и текстовым редактором и увидеть исходный словарь. Ну или хотя бы строку вида:
 {'key1': 'item1', 'key2': 'item2', 'key3': 'item3', 'key4': 'item4', 'key5': 'item5'} 

Прикреплённый файлы:
attachment hiTD5_croper_ru.png (8,9 KБ)

Офлайн

#2 Март 31, 2018 21:30:59

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Модуль pickle

Сохраняй словарь как json, это можно сделать например при помощи модуля simplejson



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Март 31, 2018 22:06:28

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль pickle

Спасибо

Офлайн

#4 Март 31, 2018 22:48:07

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль pickle

import simplejson as json
data ={'key1': 'item1',
'key2': 'item2',
'key3': 'item3',
'key4': 'item4',
'key5': 'item5',
'ключ': 'итем'}

with open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, sort_keys=True, indent=4))
Кириллические символы в создаваемом файле в виде
"\u043a\u043b\u044e\u0447": "\u0438\u0442\u0435\u043c" 
Как поправить?

PS: насколько я понимаю simplejson дублирует как минимум часть функций и методов стандартного json. Разница между ними есть? Ну, например, то же .dumps() есть и там и там.

Отредактировано SomethingButNotNickName (Март 31, 2018 22:48:48)

Офлайн

#5 Март 31, 2018 22:51:20

spikejke
Зарегистрирован: 2018-02-12
Сообщения: 42
Репутация: +  5  -
Профиль   Отправить e-mail  

Модуль pickle

SomethingButNotNickName
Добрый день.Есть некий словарь. Задача записать его в файл.
Попробуйте добавить аргумент protocol=0
Protocol version 0 is the original “human-readable” protocol and is backwards compatible with earlier versions of Python.
 import pickle
data ={'key1': 'item1',
       'key2': 'item2',
       'key3': 'item3',
       'key4': 'item4',
       'key5': 'item5'}
with open('data.txt', 'w') as f:
    pickle.dump(data, f, protocol=0)
Сам не пробовал , смущает строчка backwards compatible with earlier versions of Python )

Отредактировано spikejke (Март 31, 2018 23:05:24)

Офлайн

#6 Март 31, 2018 23:35:27

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль pickle

spikejke
Будет строка из латинских символов и цифр.
 (dp0Vkey1p1Vitem1p2sVkey2p3Vitem2 и так далее
С исходным словарем сходство есть, но слишком далекое
Насчет protocol=0 - указание на используемую версию змеи. “backwards compatible with earlier versions of Python” - возвращает совместимость с ранними версиями Python, насколько я понимаю

Офлайн

#7 Апрель 1, 2018 00:30:36

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Модуль pickle

SomethingButNotNickName
С исходным словарем сходство есть, но слишком далекое
Я не знаю чем simplejson лучше чем входящий в стандартную поставку json

https://docs.python.org/3/library/json.html

По последнему обратите внимание на ключик ensure_ascii=True, который можно сделать false Ну и открывать файл надо с encoding=“utf-8”.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version