Синхронизация aws s3 bucket (вместе со структурой папок) на локальном компьютере и запуск кода Python только на вновь добавленной локальной папке - PullRequest
0 голосов
/ 07 февраля 2019

Я читаю журналы (которые находятся в сжатом файле .gz) из исходного сегмента S3..gz файлы присутствуют в папке внутри корзины s3, которая выглядит следующим образом (папка создается на основе времени эпохи Unix, 1 папка в день)

1540684800000 (1 folder/day contains multiple .gz file)  
1541462400000  
1542240000000  
1543104000000 

Теперь мне нужно запустить код Python нижесделайте эти .gz файлы в правильном формате массива json.Данные и структура внутри одного файла .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 bucket на локальном и запускаю код python только на вновь добавленной папке (внутри локальной копии).И ежедневно загружайте новую папку в целевую корзину s3.
b) как я могу удалить / удалить записи JSON с отсутствующим атрибутом «событие» (в данном случае вторая запись), в то время как я конвертирую файл в соответствующий массив JSON.
c) могу ли я добавить записи json из нескольких файлов .gz и иметь один массив 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}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...