Написать и прочитать список списков с s3 и python - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть список списков, которые я хочу сохранить в s3.

Первоначально, когда я сохранил их локально, я преобразовал их в CSV, как это:

from csv import reader, writer

words_list = [['here', 'are', 'some', 'words']['these', 'are', 'in', 'a', 'list']['i', 'love', 'lists']]

# Save list of words list

with open("data/words.csv", "w") as f:
    wr = csv.writer(f)
    wr.writerows(words_list)


# Retrieve list of words list

with open("data/words.csv", 'r') as read_obj:
    csv_reader = reader(read_obj)
    words_list = list(csv_reader)

Я могу сохранить CSV-версию списка списков в s3, я думаю, с помощью этого, который просто берет CSV, который я уже сохранил локально:

import boto3

session = boto3.Session(
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key
)

s3 = session.resource('s3')

bucket = 'bucket_name'
path = 'data/words.csv'
key = 'data/words.csv'

s3.meta.client.upload_file(key, bucket, path)

Однако я не смог понять, как прочитать CSV обратно и преобразовать его в исходный список списков. Например, я попробовал это:

# Retrieve from s3
import csv
from io import StringIO 

bucket = 'bucket_name'
path = 'data/words.csv'

client = boto3.client('s3', 
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key
)

csv_obj = client.get_object(Bucket=bucket, Key=path)
body = csv_obj['Body']
csv_string = body.read().decode('utf-8')

Но это дает мне строку без ощущения того, где начинаются и заканчиваются отдельные списки, немного как: "here,are,some,words,these,are,in,a,list,i,love,lists"

I Я не предан этому подходу - я был бы рад всему, что позволяет мне сохранять список списков в восстанавливаемом формате в s3. Как мне этого добиться?

Спасибо!

1 Ответ

1 голос
/ 21 апреля 2020

А как насчет использования json вместо csv?

import json

words_list = [['here', 'are', 'some', 'words'],
              ['these', 'are', 'in','a', 'list'],
              ['i', 'love', 'lists']]

# save to json
with open('list_of_lists.json', mode='w') as fh:
    json.dump(words_list, fh)

# read from json
with open('list_of_lists.json', mode='r') as fh:
    words_list_from_json = json.load(fh)

print(words_list_from_json)

Отредактировано, чтобы добавить:

Затем можно прочитать / записать файл json в s3.

# Save json file to s3

data = open('list_of_lists.json', 'rb')
bucket = 'bucket_name'
path = "data/list_of_lists.json"

s3.Bucket(bucket).put_object(Key=path, Body=data)

# Retrieve json file from s3

content_object = s3.Object(bucket, path)
file_content = content_object.get()['Body'].read().decode('utf-8')
words_list = json.loads(file_content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...