Найти - Пользователи
Полная версия: Json сохранение/загрузка данных в .txt
Начало » Python для новичков » Json сохранение/загрузка данных в .txt
1 2
[NK]_Jezz
Пост на форуме первый, поэтому прошу сильно не пинать!
Недавно начал учить язык, но столкнулся с одной проблемой при рассмотрении 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
cutwater
Что-то вы изобретаете странное. Во-первых записывать несколько JSON объектов в один файл через \n плохая затея.
Почему-бы вам если уже пишите один файл, не использовать одну структуру данных для работы.
То есть воркфлоу будет примерно таким

load from json
modify data
dump to json

При этом если необходимо хранить несколько сущностей, объедените их в список.
[NK]_Jezz
Ну я не особого опыта пока не имею, и решил сделать как мне показалось будет нормально (критерием были книги, и знание из других языков)!
В то что это плохая затея я знаю, но нужно именно так (это задание которое мне дали, критерием которого было сохранение с помощью Json)!
Я не могу просто сделать правильное сохранение и потом загрузку, то есть использование моих данных, по разному пробовал и в строку, и столбик :)
можете привести кусочек кода который будет мне помогать в данной ситуации (то есть сохранение и загрузку)
мне не важно как оно будет выглядеть в файле запись в строку, или колонку!
doza_and
:) акивно читать сохранять или модифицировать json это вам в базы данных - ставите mongodb и получаете удовольствие. Всего несколько десятоков мегабайт исполняемого кода и пара сотен страниц документации.

p.s.
Конечно несколько злой совет, но если разберетесь с mongodb получите полезный инструмент и богатый опыт программирования на питоне
[NK]_Jezz
Я же написал что необходимо только в JSON представьте что это как школьное задние, сделать только так и не иначе!
Мне его особо активно использовать не нужно, просто чтобы можно было сохранить несколько раз чутка отредактировать, загрузить…
doza_and
грузите полностью из файла в память
редактируете только в памяти
если надо сохранить - все пишете на диск целиком вот и все.
Остальное помоему от лукавого.
При таком подходе вообще не важно как он там в файле улегся
[NK]_Jezz
блииин…
Ну я же писал что я нуб! и прошу в помощ кусок кода для примера реализации!
если я поназаписываю {“field1”: “f1”, “field2”: “f2”, “field3”: “f3”} в ряд я не знаю как потом их правильно все разбить, и извлечь для работы!
а записывать их в столбик мне сказали вообще глупо и не ризонно!
doza_and
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")
alexzander77
'[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'}]
hottabov
Все равно не понятно. У меня похожая задача.
Нужно извлечь данные, изменить, сохранить.

Пример файла:
file1.json
Что в файле:
 {"date": "01.07.2015", "views": 301}, {"date": "02.07.2015", "views": 355}, {"date": "03.07.2015", "views": 371}

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

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

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

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB