Открыть и прочитать последний json файл только один раз - PullRequest
3 голосов
/ 02 мая 2020

ТАКИХ членов ... как я могу прочитать последний json файл в каталоге только один раз (если нет нового файла, напечатать что-нибудь). Пока что я могу только читать последний файл ... Пример скрипта (запускается каждые 45 минут) ниже открывает и читает последний файл json в каталоге. В этом случае последний файл - это файл 3. json (файл json создается каждые 30 минут). Таким образом, если файл4 по какой-то причине не создан (например, серверу не удалось создать новый файл json). Если скрипт запустится снова .. он все равно будет читать тот же последний файл3.

файлов в каталоге

file1.json
file2.json
file3.json

Приведенный ниже скрипт может открывать и читать последний json файл, созданный в каталоге.

import glob
import os
import os.path
import datetime, time

listFiles = glob.iglob('logFile/*.json') 
latestFile = max(listFiles, key=os.path.getctime)
with open(latestFile, 'r') as f:
   mydata = json.load(f)
   print(mydata)

Чтобы скрипт был читать только самый новый файл и читать только один раз ... только что-то ниже: -

listFiles = glob.iglob('logFile/*.json') 
latestFile = max(listFiles, key=os.path.getctime)
if latestFile newer than previous open/read file: # Not sure to compare the latest file with the previous file.
    with open(latestFile, 'r') as f:
       mydata = json.load(f)
       print(mydata)
else:
    print("no new file created")

Спасибо за вашу помощь. Примером решения было бы хорошо поделиться.


Я не могу найти решение ... кажется простым, но несколько дней безуспешно пробуют ошибки.

(1)Make sure read latest file in directory 
(2)Make sure read file/s that may miss to read (due to script fail to run)
(3)Only read once all the files and if no new file give warning.

Спасибо.


После обсуждения и предложения SO у меня было мало способов решить или, по крайней мере, удовлетворить некоторые требования. Я просто перемещаю файлы, которые были обработаны. Если файл не создан, скрипт ничего не запустит, а если скрипт не удастся, и после нормализации он запустится и прочитает все доступные файлы. Я думаю, что это хорошо на данный момент. Спасибо, парень ...

1 Ответ

3 голосов
/ 03 мая 2020

Ниже приведен ответ, а скорее подход, я хотел бы предложить:

enter image description here

Идея заключается в следующем:
Каждый файл журнала записанный в каталог ключ может содержать ключ-имя с именем "creation_time": timestamp (файл X. json, который хранится на сервере). Теперь ваш скрипт выполняется на 45min, чтобы получить файл, который выгружается в каталог. В обычных случаях вы должны быть в состоянии прочитать файл, и, наконец, при выходе из сценария вы можете сохранить последнее прочитанное имя файла и время создания, взятые из fileX.json в logger.json.
Пример для logger. json выглядит следующим образом:

{
"creation_time": "03520201330",
"file_name": "file3.json"
}  

Каждый раз, когда происходит сбой сервера или происходит какая-либо задержка, в каталоге может быть перезаписано значение fileX.json или new fileX's.json. В этих ситуациях вы сначала должны открыть регистратор. json и получить метку времени и последнее имя файла, как показано в примере выше. Используя последнее имя файла, вы можете сравнить старую временную метку, которая присутствует в регистраторе, с новой временной меткой в ​​fileX.json. Если они в основном совпадают, изменений нет, вы только читаете файлы вперед и переписываете регистратор.
Если это не так, вы снова перечитываете последний fileX.json и переходите к чтению других файлов вперед.

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