繁体   English   中英

仅一次打开并读取最新的 json 文件

[英]Open and read latest json file one time only

SO成员......我如何才能在一个目录中读取最新的json文件一次(如果没有新文件打印一些东西)。 到目前为止,我只能读取最新的文件...下面的示例脚本(每 45 分钟运行一次)打开并读取目录中最新的 json 文件。 在这种情况下,最新文件是 file3.json(每 30 分钟创建一次 json 文件)。 因此,如果由于某种原因未创建 file4(例如服务器无法创建新的 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")

谢谢您的帮助。 示例解决方案将很好分享。


我无法弄清楚解决方案......似乎很简单,但几天尝试 n 错误没有任何运气。

(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 讨论和建议之后,我得到的解决方法很少,或者至少可以满足一些要求。 我只是移动已处理的文件。 如果没有文件创建,脚本将不会运行,如果脚本失败并且一旦规范化它将运行并读取所有可用的相关文件。 我认为它现在很好。 谢谢大佬...

下面是答案,而不是一种方法,我想提出:

在此处输入图像描述

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

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

每当服务器出现故障或发生任何延迟时,可能会重写fileX.jsonnew fileX's.json将在目录中创建。 在这些情况下,您将首先打开 logger.json 并获取时间戳和最后一个文件名,如上例所示。 通过使用最后一个文件名,您可以将 logger 中存在的旧时间戳与fileX.json中的新时间戳进行比较。 如果它们基本上匹配,则没有更改,您只需提前读取文件并重写记录器。
如果不是这种情况,您将重新读取最后一个fileX.json并继续读取其他前面的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM