Форум сайта python.su
Пост на форуме первый, поэтому прошу сильно не пинать!
Недавно начал учить язык, но столкнулся с одной проблемой при рассмотрении Json! Мне необходимо было сохранять 3 поля с данными в файл я сделал это с помощью словаря и ключей выглядело это так:
dict = {}
dict['field1'] = f1
dict['field2'] = f2
dict['field3'] = f3
with open('filename', mode='w') as f:
json.dump(dict, f)
x=json.dumps(dict)
y=x+'\n'
f.write(y)
data = json.load( open('filename', 'r') )
f1 = data['field1']
f2 = data['field2']
f3 = data['field3']
Отредактировано (Март 5, 2012 18:28:27)
Офлайн
Что-то вы изобретаете странное. Во-первых записывать несколько JSON объектов в один файл через \n плохая затея.
Почему-бы вам если уже пишите один файл, не использовать одну структуру данных для работы.
То есть воркфлоу будет примерно таким
load from json
modify data
dump to json
При этом если необходимо хранить несколько сущностей, объедените их в список.
Офлайн
Ну я не особого опыта пока не имею, и решил сделать как мне показалось будет нормально (критерием были книги, и знание из других языков)!
В то что это плохая затея я знаю, но нужно именно так (это задание которое мне дали, критерием которого было сохранение с помощью Json)!
Я не могу просто сделать правильное сохранение и потом загрузку, то есть использование моих данных, по разному пробовал и в строку, и столбик :)
можете привести кусочек кода который будет мне помогать в данной ситуации (то есть сохранение и загрузку)
мне не важно как оно будет выглядеть в файле запись в строку, или колонку!
Офлайн
:) акивно читать сохранять или модифицировать json это вам в базы данных - ставите mongodb и получаете удовольствие. Всего несколько десятоков мегабайт исполняемого кода и пара сотен страниц документации.
p.s.
Конечно несколько злой совет, но если разберетесь с mongodb получите полезный инструмент и богатый опыт программирования на питоне
Отредактировано (Март 5, 2012 20:41:13)
Офлайн
Я же написал что необходимо только в JSON представьте что это как школьное задние, сделать только так и не иначе!
Мне его особо активно использовать не нужно, просто чтобы можно было сохранить несколько раз чутка отредактировать, загрузить…
Офлайн
грузите полностью из файла в память
редактируете только в памяти
если надо сохранить - все пишете на диск целиком вот и все.
Остальное помоему от лукавого.
При таком подходе вообще не важно как он там в файле улегся
Офлайн
блииин…
Ну я же писал что я нуб! и прошу в помощ кусок кода для примера реализации!
если я поназаписываю {“field1”: “f1”, “field2”: “f2”, “field3”: “f3”} в ряд я не знаю как потом их правильно все разбить, и извлечь для работы!
а записывать их в столбик мне сказали вообще глупо и не ризонно!
Офлайн
http://docs.python.org/library/json.html
import json
import codecs
def sv(obj,p,encoding="cp1251"):
u"""сохранение объекта"""
with codecs.open(p,"wt",encoding=encoding) as f:
json.dump(obj,f,indent=1,ensure_ascii=0)
def ld(p,encoding="cp1251"):
u"""загрузка объекта"""
with codecs.open(p,"rt",encoding=encoding) as f:
return json.load(f)
a=["asd","qwe",5,5.5]
sv(a,"a.dat")
b=ld("a.dat")
Отредактировано (Март 5, 2012 20:37:31)
Офлайн
'[NK
_Jezz']блииин…
Ну я же писал что я нуб! и прошу в помощ кусок кода для примера реализации!
если я поназаписываю {“field1”: “f1”, “field2”: “f2”, “field3”: “f3”} в ряд я не знаю как потом их правильно все разбить, и извлечь для работы!
а записывать их в столбик мне сказали вообще глупо и не ризонно!
#в пустой список добавили три словаря и записали в файл
>>> content=[]
>>> for i in range(3):content.append({"one":1*i,"two":2*i,"three":3*i})
>>> content
[{'three': 0, 'two': 0, 'one': 0}, {'three': 3, 'two': 2, 'one': 1}, {'three': 6, 'two': 4, 'one': 2}]
>>> json.dump(content,open("d:/test2.json","w"))
#прочитали из файла, напечатали, изменили, сохранили
>>> content2=json.load(file("d:/test2.json"))
>>> content2
[{u'one': 0, u'three': 0, u'two': 0}, {u'one': 1, u'three': 3, u'two': 2}, {u'one': 2, u'three': 6, u'two': 4}]
>>> for i in content2:print i['one'],i['two'],i['three']
0 0 0
1 2 3
2 4 6
>>> content2[1]["two"]="twenty two"
>>> content2
[{u'one': 0, u'three': 0, u'two': 0}, {u'one': 1, u'three': 3, u'two': 'twenty two'}, {u'one': 2, u'three': 6, u'two': 4}]
>>> json.dump(content2,open("d:/test2.json","w"))
#и опять прочитали
>>> content3=json.load(file("d:/test2.json"))
>>> for i in content3:print i['one'],i['two'],i['three']
0 0 0
1 twenty two 3
2 4 6
>>>
# дописали новых словарей и сохранили
>>> for i in range(3):content3.append({"one":"1"*i,"two":"2"*i,"three":"3"*i})
>>> json.dump(content3,open("d:/test2.json","w"))
# ну и опять контрольнЬІй. прочитали
>>> content4=json.load(file("d:/test2.json"))
>>> for i in content4:print i['one'],i['two'],i['three']
0 0 0
1 twenty two 3
2 4 6
1 2 3
11 22 33
>>> content4
[{u'one': 0, u'three': 0, u'two': 0}, {u'one': 1, u'three': 3, u'two': u'twenty two'}, {u'one': 2, u'three': 6, u'two': 4}, {u'one': u'', u'three': u'', u'two': u''}, {u'one': u'1', u'three': u'3', u'two': u'2'}, {u'one': u'11', u'three': u'33', u'two': u'22'}]
Офлайн
Все равно не понятно. У меня похожая задача.
Нужно извлечь данные, изменить, сохранить.
Пример файла:
file1.json
Что в файле:
{"date": "01.07.2015", "views": 301}, {"date": "02.07.2015", "views": 355}, {"date": "03.07.2015", "views": 371}
Отредактировано hottabov (Сен. 13, 2016 14:34:41)
Офлайн