在本地同步AWS S3存储桶(以及文件夹结构),仅在新添加的本地文件夹上运行python代码

时间:2019-02-07 02:21:13

标签: python amazon-s3 boto3

我正在从源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}]

0 个答案:

没有答案