只打开和读取最新的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.json
或new fileX's.json
的重写。在这些情况下,您需要首先打开logger.json并获取时间戳和最后一个文件名,如上面的示例所示。通过使用最后的文件名,您可以将Logger中存在的旧时间戳与fileX.json
中的新时间戳进行比较。如果它们基本匹配,则只需预读文件并重写记录器即可。如果不是这样,您应该再次阅读最后
fileX.json
,然后继续阅读其他前面的文件。
相关文章