[AWS] txt파일 생성부터 s3업로드까지 한방에

채록·2021년 6월 15일
0

AWS&Docker

목록 보기
8/12
post-thumbnail

테스트를 위해 s3내 dumy file들이 많이 필요했다.
일일이.. 손으로.. 업로드하는것은.. 진짜 아닌거 같았다. (최소 100개정도가 필요했다.)

그래서!! 원하는 조건으로 dictionary형태를 만들고 해당 형태의 내용을 담은 file로 s3에 업로드 되기까지 코드로 작성해버렸다.


1. txt 파일 만들기

알고리즘을 풀때 이와 같은 코드를 많이 작성했었다.

import sys
sys.stdin = open("파일명", "rt")
n = input()
m = input()

위 코드는 "파일명"의 내용을 한줄 읽고, n값에 대입하는 것이다. n 다음에 m에는 두번째 줄의 내용이 담긴다.

txt 파일을 작성할 때는 sys.stdout을 사용한다.

sys.stdout = open("폴더명/파일명.txt", "a")

"폴더명"에 해당하는 폴더는 사전에 생성해 두어야 한다. 이후 폴더명/파일명으로 지정해 놓으면 그 폴더 안에 "파일명"으로 txt파일이 자동으로 생성된다. 물론 txt 대신 다른 확장자명 쓰면 그걸로 생성된다.

작성될 파일까지 지정해 주었는데 어떻게.. 저장하지..?
싶으면
print문으로 한다!!!!


import sys
import datetime

sys.stdout = open('velog/velogpractice.txt', 'a')

date = datetime.datetime(2021, 6, 20)

def create_log(date):
  ex = [{"name": "purple", "age": 4, "hobby": "hiking"}, {"name": "green", "age": 3, "hobby": "singing"},
        {"name": "yellow", "age": 2, "hobby": "reading"}, {"name": "red", "age": 1, "hobby": "dancing"}]

  for i, row in enumerate(ex):
    row['time'] = date+datetime.timedelta(minutes=10*i)
    print(row)

create_log(date)

위 코드로 작성된 파일은 velog라는 폴더 내 velogpractice라는 txt 파일에 내용이 저장되어 있다. 순서는 위에서 아래이다.

[velog/velogpractice.txt]

{'name': 'purple', 'age': 4, 'hobby': 'hiking', 'time': '2021-06-20-12-00-00'}
{'name': 'green', 'age': 3, 'hobby': 'singing', 'time': '2021-06-20-12-00-10'}
{'name': 'yellow', 'age': 2, 'hobby': 'reading', 'time': '2021-06-20-12-00-20'}
{'name': 'red', 'age': 1, 'hobby': 'dancing', 'time': '2021-06-20-12-00-30'}

2. txt파일 읽어오기

s3업로드 하기 위해 txt파일 내 정보를 읽어와야 한다.

굳이 txt파일로 안만들고 바로 s3에 저장할수도 있지만 나에게는 s3에 저장 과정이 필요했기 때문에 이렇게 했다.!!!

이때에도 txt파일에 저장된 한줄씩 읽으면서 바로 s3에 저장할 것이기 때문에 다음과 같이 코드를 작성했다.


# txt파일 읽어오기
sys.stdin=open("velog/velogpractice.txt", "rt")

while True:
  n = str(input())
  save_to_s3_velog(n)

이제 읽어온 한줄은 바로 save_to_s3_velog라는 메소드로 실행될 것이다.


3. s3에 저장하기

특별히 제목을 가공하지 않는다면 저장 자체는 어렵지 않다.! 가공이 항상..문제야.. 그리고 난 가공을 한다. 😃 그게 중요한게아니니 가공 과정은 생략한다.


def save_to_s3_velog(data):
    bucket = 'velog-practice'
    s3 = boto3.client('s3', aws_access_key_id, aws_secret_access_key)
    s3.put_object(Body=data, Bucket=bucket, Key=name, ContentType='text/plain')

Body
S3에 저장되는것은 모두 byte 타입이다.


ContentType
이를 설정해주지 않으면 aws 사이트에서 해당 파일을 열기 했을때 바로 안열리고 download가 된다. 이.. 차이뿐인가..?


put_object
s3에 저장하는 속성이다.


---------------------------------


끝!

이제 다음 포스팅에서 s3에 저장된 file의 내용을 읽어 mongoDB에 저장하는걸 다뤄보자.

profile
🍎 🍊 🍋 🍏 🍇

0개의 댓글