Итерация по JSON и сохранение в файл на S3 - PullRequest
0 голосов
/ 23 мая 2019

Я создал простой скрипт на python, который создает файл JSON и загружает его в S3, используя json и boto3.

В данный момент я работаю над устройством чтения, которое открывает файл и интуитивно понятным образом просматривает ключи 1 и значение 1, позволяя пользователю редактировать их и сохранять в исходном файле.

Я исследовал клик, изучил пользовательские вводы, итерации и циклы while, и действительно углубился в кроличью нору, и мне нужно какое-то общее направление, куда идти, если я хочу, чтобы CLI предлагал пользователям редактировать значенияв коде JSON вы можете видеть, где я сейчас нахожусь.

СКРИПТ ПИСАТЕЛЯ:

import json
import boto3

data = [
  {
    "first_name": "Thor",
    "last_name": "Odinsson",
    "raw_date": "2016-01-05",
    "birthday": "10000BC"
  },
  {
    "first_name": "Odin",
    "last_name": "Allfather",
    "raw_date": "2018-07-11",
    "birthday": "30000BC"
  }
]
s3 = boto3.resource('s3')
obj = s3.Object('mjolnir','mjolnir.json')
obj.put(Body=json.dumps(data, indent=4))

СКРИПТ ЧИТАТЕЛЯ / РЕДАКТОРА:

import json 
import boto3


s3 = boto3.client('s3')
data = s3.get_object(Bucket='mjolnir', Key='mjolnir.json')
contents = data['Body'].read().decode()

sep = " "

with open ("mjolnir.json", "rb+") as fd:
    seekpos = fd.tell()
    line = fd.readline()
    while(line):
        print(line)
        next = input(">>> ")
        if next == ":q":
            break
        if next:
            values = line.split(sep)
            newval = values[0] + sep + next + '\n'
            if len(newval) == len(line):
                fd.seek(seekpos)
                fd.write(newval)
                fd.flush()
                os.fsync(fd)
            else:
                remaining = fd.read()
                fd.seek(seekpos)
                fd.write(newval + remaining)
                fd.flush()
                os.fsync(fd)
                fd.seek(seekpos)
                line = fd.readline()
        seekpos = fd.tell()
        line = fd.readline()

Вмой терминал показывает только мне: b '[\ n'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...