我正在从源S3存储桶中读取日志(位于压缩的.gz
文件中)。 .gz
文件位于s3存储桶中的文件夹中,该文件如下所示(文件夹是根据unix纪元时间创建的,每天1个文件夹)
1540684800000 (1 folder/day contains multiple .gz file)
1541462400000
1542240000000
1543104000000
现在,我必须在python代码下运行,以正确的json数组格式制作这些.gz
文件。单个.gz
文件中的数据和结构如下。 json数组在两个json数组之间(在"version":2
之后)缺少括号[]和逗号(,)。有一个新行(\n
)字符分隔两个json数组记录。
{"context":"abc","event":"login","timestamp":"2018-09-27T17:35:55.835Z","version":2}
{"context":"def","timestamp":"2018-09-27T17:35:55.835Z","Id":"faf91826-ebc9-4242-996f-d52969bec2d5","version":2}
{"context":"xyz","event":"LandingPage","timestamp":"2019-01-21T05:14:22.998Z","Id":"88016b33-72d7-458e-8de8-f76241f4b681","version":2}
现在,我已经手动解压缩了.gz
文件,然后将它们重命名为.json
(通过Unix命令)。并将在python代码下面运行,以使这些文件以正确的json格式-
import json
import pandas as pd
import glob
import os
import re
for subdir, dirs, files in os.walk ('/user/home/src/'):
for file in files:
path = subdir + os.sep + file
if not(path.endswith('.DS_Store')):
print(file)
jsonFile = open(path,"r")
text = jsonFile.read()
jsonFile.close()
#working with buffered content
#text = "["+text+"]"
pattern = re.sub(r'}(\s*){', r'},\1{', text)
## Save changes to JSON file
jsonFile = open(path, "w+")
data = "["+json.loads(json.dumps(pattern))+"]"
jsonFile.write(data)
jsonFile.close()
我需要在本地复制源.gz
文件,并在python代码上运行,以使其具有正确的json数组格式,然后将其上传到目标s3存储桶。我是python的新手,需要-
a)我如何每天在本地同步源s3存储桶并仅在新添加的文件夹(本地副本内)上运行python代码。并每天在目标s3存储桶上上传新文件夹。
b)在将文件转换为正确的json数组的同时,如何删除/删除缺少“ event”属性的json记录(在本例中为第二条记录)。
c)我可以从多个.gz文件追加json记录,并拥有一个json数组(扩展名为.json)。所以我每天只有一个.json文件。
json文件中的预期输出:
[{"context":"abc","event":"login","timestamp":"2018-09-27T17:35:55.835Z","version":2},
{"context":"xyz","event":"LandingPage","timestamp":"2019-01-21T05:14:22.998Z","Id":"88016b33-72d7-458e-8de8-f76241f4b681","version":2}]