Как обновить вывод с изменением файла json, используя Python? - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть сценарий Python с именем users.py , который записывает некоторые данные в файл json.

import json
from os import path

users = [{
    'name': '',
    'age': ''
}]

name = input('\nName: ')
age = input('Age: ')

for user in users:
    user['name'] = name
    user['age'] = age

if path.exists('users.json'):
    with open('users.json', 'r') as file:
        previous_data = json.load(file)
        users = previous_data + users
with open('users.json', 'w') as file:
    json.dump(users, file, indent=4)

Другой файл с именем show_data .py , извлекает данные из этого json файла.

import json

with open('users.json', 'r') as file:
users = json.load(file)

for user in users:
    print('Name:', user['name'])
    print('Age:', user['age'])

Я хочу сохранить скрипт show_data.py работающим, который будет искать любые изменения в файле json. Если какой-либо ввод дается через users.py , то вывод show_data.py будет автоматически обновлен.

Как я могу это сделать?

1 Ответ

0 голосов
/ 13 апреля 2020

Есть много разных библиотек, которые вы можете выбрать, чтобы решить вопрос Как просмотреть файл на предмет изменений?

Но если этого достаточно, чтобы каждые несколько секунд опрашивать возможно обновленная временная метка файла json, вы можете сделать это самостоятельно:

import os
import time
import json


class Watcher(object):
    def __init__(self, filename):
        self.last_time_stamp = 0
        self.filename = filename

    def file_has_changed(self):
        stamp = os.stat(self.filename).st_mtime
        if stamp != self.last_time_stamp:
            self.last_time_stamp = stamp
            return True


if __name__ == '__main__':
    w = Watcher("users.json")
    while True:
        if w.file_has_changed():
            with open('users.json', 'r') as file:
                users = json.load(file)

            for user in users:
                print('Name:', user['name'])
                print('Age:', user['age'])
        time.sleep(1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...