Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2012 18:06:39

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

Пост на форуме первый, поэтому прошу сильно не пинать!
Недавно начал учить язык, но столкнулся с одной проблемой при рассмотрении Json! Мне необходимо было сохранять 3 поля с данными в файл я сделал это с помощью словаря и ключей выглядело это так:

dict = {}
dict['field1'] = f1
dict['field2'] = f2
dict['field3'] = f3
with open('filename', mode='w') as f:
json.dump(dict, f)
результат выглядит так

{“field1”: “f1”, “field2”: “f2”, “field3”: “f3”}

так выглядело просто запись файлов с созданием файла, или записью заново в этот же файл, но потом столкнулся с тем что мне необходимо не просто записать в файл, но дозаписывать в таком же формате, ещё данные, а потом ещё и считывать их и использовать. Дозаписывать можно было просто изменив mode='w' на mode='a' но такой вариант использовать было бы проблематично так как данные будут просто дозаписыватся в строку.
Использовать данные в таком виде записи очень проблематично, поэтому отбросил. Далее появилась идея переноса не следующую строку.
Выглядело это так
x=json.dumps(dict)
y=x+'\n'
f.write(y)
Перенос на следующую строку был осущесвлён!
Чтение из файла было тоже осуществлено, но очень частично и просто в обратном порядке. И было возможно только чтение 1 изначально записанной строки первым куском кода, никакие циклы мне не помогли :(
data = json.load( open('filename', 'r') )
f1 = data['field1']
f2 = data['field2']
f3 = data['field3']
Вот результат того что я смог сам!
Теперь вопрос к вам специалисты: Как правильно, или лучше сделать сохранение и загрузку в файл. Необходимо будет активно работать с файлом: считывать, сохранять, удалять поля, редактировать и т.д.
Если как-то поможет, всё это будет производится в методе, метод будет в классе!
Помоги оптимизировать вид сохранения, и загрузки чтобы можно было проводить различные операции редактирования с ним!
P.S. Это необходимо сделать именно с помощью JSON



Отредактировано (Март 5, 2012 18:28:27)

Офлайн

#2 Март 5, 2012 18:37:14

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

Что-то вы изобретаете странное. Во-первых записывать несколько JSON объектов в один файл через \n плохая затея.
Почему-бы вам если уже пишите один файл, не использовать одну структуру данных для работы.
То есть воркфлоу будет примерно таким

load from json
modify data
dump to json

При этом если необходимо хранить несколько сущностей, объедените их в список.



Офлайн

#3 Март 5, 2012 18:48:48

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

Ну я не особого опыта пока не имею, и решил сделать как мне показалось будет нормально (критерием были книги, и знание из других языков)!
В то что это плохая затея я знаю, но нужно именно так (это задание которое мне дали, критерием которого было сохранение с помощью Json)!
Я не могу просто сделать правильное сохранение и потом загрузку, то есть использование моих данных, по разному пробовал и в строку, и столбик :)
можете привести кусочек кода который будет мне помогать в данной ситуации (то есть сохранение и загрузку)
мне не важно как оно будет выглядеть в файле запись в строку, или колонку!



Офлайн

#4 Март 5, 2012 19:15:51

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

Json сохранение/загрузка данных в .txt

:) акивно читать сохранять или модифицировать json это вам в базы данных - ставите mongodb и получаете удовольствие. Всего несколько десятоков мегабайт исполняемого кода и пара сотен страниц документации.

p.s.
Конечно несколько злой совет, но если разберетесь с mongodb получите полезный инструмент и богатый опыт программирования на питоне



Отредактировано (Март 5, 2012 20:41:13)

Офлайн

#5 Март 5, 2012 19:21:47

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

Я же написал что необходимо только в JSON представьте что это как школьное задние, сделать только так и не иначе!
Мне его особо активно использовать не нужно, просто чтобы можно было сохранить несколько раз чутка отредактировать, загрузить…



Офлайн

#6 Март 5, 2012 19:29:45

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

Json сохранение/загрузка данных в .txt

грузите полностью из файла в память
редактируете только в памяти
если надо сохранить - все пишете на диск целиком вот и все.
Остальное помоему от лукавого.
При таком подходе вообще не важно как он там в файле улегся



Офлайн

#7 Март 5, 2012 19:35:47

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

блииин…
Ну я же писал что я нуб! и прошу в помощ кусок кода для примера реализации!
если я поназаписываю {“field1”: “f1”, “field2”: “f2”, “field3”: “f3”} в ряд я не знаю как потом их правильно все разбить, и извлечь для работы!
а записывать их в столбик мне сказали вообще глупо и не ризонно!



Офлайн

#8 Март 5, 2012 20:33:31

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

Json сохранение/загрузка данных в .txt

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)

Офлайн

#9 Март 5, 2012 20:47:31

alexzander77
От:
Зарегистрирован: 2009-01-27
Сообщения: 46
Репутация: +  1  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

'[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'}]



Офлайн

#10 Сен. 13, 2016 14:34:13

hottabov
Зарегистрирован: 2016-03-20
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Json сохранение/загрузка данных в .txt

Все равно не понятно. У меня похожая задача.
Нужно извлечь данные, изменить, сохранить.

Пример файла:
file1.json
Что в файле:

 {"date": "01.07.2015", "views": 301}, {"date": "02.07.2015", "views": 355}, {"date": "03.07.2015", "views": 371}

Нужно открыть последнее значение “views”, добавить +1, сохранить.

Вот над этой задачкой бьюсь, и без помощи коллектива, чувствую, не обойдусь.

Прошу помощи у знающих, как это реализовать?

Отредактировано hottabov (Сен. 13, 2016 14:34:41)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version