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

2024-04-16 23:54:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,各位成员……我如何才能一次性读取目录中最新的json文件(如果没有新文件打印内容)。到目前为止,我只能读取最新的文件…下面的示例脚本(每45分钟运行一次)打开并读取目录中最新的json文件。在本例中,最新的文件是file3.json(每30分钟创建一次json文件)。因此,如果出于某种原因(例如服务器无法创建新的json文件)未创建文件4。如果脚本再次运行。。它仍将读取相同的最后一个文件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.

多谢各位


经过这么多的讨论和建议,我得到了一些方法来解决,或者至少满足了一些需求。我只是移动已处理的文件。若并没有创建文件,脚本将什么也不运行,若脚本失败,一旦规范化,它将运行并读取所有可用的相关文件。我认为现在很好。谢谢你,伙计


Tags: 文件topathimport目录脚本jsonread
1条回答
网友
1楼 · 发布于 2024-04-16 23:54:07

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

enter image description here

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

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

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

相关问题 更多 >