Я пытаюсь записать вывод python в файл json. Я могу этого добиться, но это происходит только тогда, когда я перестаю выполнять программу.
Это мой программный файл Python
def WriteJson(data):
j = json.dumps(data)
with open('Example.json','w') as f:
f.write(j)
f.close()
i = 1
data = {}
while(1):
time.sleep(0.5 )
if i <= 35:
i+=5
data = {"i": i}
WriteJson(data)
print(data)
time.sleep(2)
else:
i = 25
data = {"i": i}
j = json.dumps(data)
WriteJson(data)
print(data)
time.sleep(2)
Когда я запускаю эту программу, я вижу Example.json
{"i": 30}
Я хочу что-то подобное в Example.json
{"i": 6}
{"i": 11}
{"i": 16}
{"i": 21}
{"i": 26}
{"i": 31}
{"i": 36}
{"i": 25}
{"i": 30}
Если кто-нибудь здесь может мне помочь.
Из документации Python открытие файла в режиме "w"
(запись) усекает файл перед записью в него, но открытие файла в режиме "a"
(дополнение) позволяет вам записывать в конец файла, не удаляя его содержимое. . Итак, вы можете сделать что-то вроде этого:
def WriteJson(data):
j = json.dumps(data)
with open('Example.json','a') as f:
f.write(j)
f.write('\n')
i = 1
data = {}
while(1):
time.sleep(0.5 )
if i <= 35:
i+=5
data = {"i": i}
WriteJson(data)
print(data)
time.sleep(2)
else:
i = 25
data = {"i": i}
j = json.dumps(data)
WriteJson(data)
print(data)
time.sleep(2)
Это должно добавляться к файлу, а не перезаписывать его.
Альтернатива, которая должна быть более производительной, но немного больше изменяет ваш код, заключается в том, чтобы открывать файл один раз, а не каждый раз, когда вам нужно в него писать. Мы используем buffering=1
, чтобы обеспечить немедленную запись записи в файл, а не после завершения программы, поскольку в вашем вопросе указано, что запись должна быть завершена немедленно:
def WriteJson(data, file):
j = json.dumps(data)
f.write(j)
f.write('\n')
with open('Example.json', 'w', buffering=1) as f:
i = 1
# ...
WriteJson(data, f)