只打开和读取最新的json文件一次 [英] Open and read latest json file one time only

查看:98
本文介绍了只打开和读取最新的json文件一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以成员们……我如何才能一次只读取目录中的最新json文件(如果没有新文件打印某些内容)。到目前为止,我只能读取最新的文件...下面的示例脚本(每45分钟运行一次)打开并读取目录中的最新json文件。在本例中,最新的文件是file3.json(每30分钟创建一次json文件)。因此,如果由于某种原因没有创建文件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.

谢谢。


经过这样的讨论和建议,我得到的方法很少,或者至少可以满足一些要求。我只移动已处理的文件。如果没有创建文件,脚本将不运行,如果脚本失败,一旦标准化,它将运行并读取所有可用相关文件。我认为目前还不错。谢谢你们,伙计们...

推荐答案

以下是答案而不是一种方法,我想建议:

想法如下:
写入目录的每个日志文件都可以有一个名为"creation_time": timestamp的key-val(存储在服务器中的文件X.json)。现在,您的脚本在45min运行以获取转储到目录的文件。在正常情况下,您必须能够读取文件,最后,当您退出脚本时,您可以将上次读取的文件名和从fileX.json获取的创建时间存储到logger.json中。
以下是logger.json的示例:

{
"creation_time": "03520201330",
"file_name": "file3.json"
}  
每当服务器出现故障或发生任何延迟时,都可能会在目录中创建fileX.jsonnew fileX's.json的重写。在这些情况下,您需要首先打开logger.json并获取时间戳和最后一个文件名,如上面的示例所示。通过使用最后的文件名,您可以将Logger中存在的旧时间戳与fileX.json中的新时间戳进行比较。如果它们基本匹配,则只需预读文件并重写记录器即可。
如果不是这样,您应该再次阅读最后fileX.json,然后继续阅读其他前面的文件。

这篇关于只打开和读取最新的json文件一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆