본문 바로가기
programing/aws

[ aws s3 ] python으로 bucket에서 파일 읽기, 삭제하기

by 궈능비 2022. 9. 3.
728x90
반응형

출처 - 구글

 

aws s3 버킷 만드는 방법은 아래의 글을 참고해주세요

 

2022.09.03 - [aws/s3] - [ aws S3 ] S3 (Simple Storage Service) bucket 만들기

 

[ aws S3 ] S3 (Simple Storage Service) bucket 만들기

aws s3를 이용해보려고 합니다 s3를 이용할 때는 버킷을 먼저 만들어줘야 합니다 버킷을 만들어 보겠습니다 우선 일반 구성부터 설정해줍니다 버킷 이름 : testbucket + 본인 이름(영어)으로 해줄게요

kwon-eb.tistory.com

 

aws s3 버킷에 파일 업로드 방법은 아래의 글을 참고해주세요

 

2022.09.03 - [aws/s3] - [ aws s3 ] python으로 s3 연결해서 파일 업로드 하기

 

[ aws s3 ] python으로 s3 연결해서 파일 업로드 하기

s3 버킷을 만들었으니 우선 python에서 s3에 접근해보겠습니다 s3 버킷 생성 방법은 아래의 글을 참고해주세요 2022.09.03 - [aws/s3] - [ aws S3 ] S3 (Simple Storage Service) bucket 만들기 [ aws S3 ] S3 (Si..

kwon-eb.tistory.com

 

오늘은 버킷에 올린 파일을 읽어보겠습니다

 


파일 읽기

 

우선 필요한 모듈을 다운로드하겠습니다

pip install pandas

 

# s3.py

import boto3
import os
import io
import pandas as pd

AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_BUCKET_NAME = os.environ['AWS_BUCKET_NAME']

file_name_list = ["a.text", "b.csv"]

def connection_s3():
    """
    connection aws s3 user

    Returns:
        s3_client: aws s3 user
    """    
    try:
        print("connection_s3 start")

        s3_client = boto3.client(service_name="s3",
                            aws_access_key_id=AWS_ACCESS_KEY_ID,
                            aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

        return s3_client
    except Exception as e:
        print(e)
        raise
    finally:
        print("connection_s3 end")


def upload_file_def(s3_client):
    """
    s3 upload file -- txt, csv etc

    Args:
        s3_client (aws user): aws s3 user
    """    
    try:
        for file_name in file_name_list:
        #                           올릴 파일이름,  버킷 이름,      버킷에 저장될 파일 이름
            s3_client.upload_file(f"./{file_name}", AWS_BUCKET_NAME, f"{file_name}")
            print(f"{file_name} upload success")
    except Exception as e:
        print(e)
    finally:
        print("upload_file_def end")


def read_file_def(s3_client):
    """
    s3 file read

    Args:
        s3_client (aws user): aws s3 user
    """    
    try:
        
        for file_name in file_name_list:
            file_n, file_type = file_name.split(".")

            obj = s3_client.get_object(Bucket=AWS_BUCKET_NAME, Key=file_name)

            body = obj["Body"].read()

            if file_type == "csv":
                df = pd.read_csv(io.BytesIO(body))
                print(df)
            elif file_type == "text":
                print(body)

            print(f"{file_name} read success")
    except Exception as e:
        print(e)
        raise
    finally:
        print("read_file_def end")


if __name__ == "__main__":
    try:

        s3_client = connection_s3()
        upload_file_def(s3_client)
        read_file_def(s3_client)
    except Exception as e:
        print(e)
    finally:
        print("bucket finish")

 

read_file_def라는 함수를 새로 추가했습니다

 

csv일 경우에는 안의 내용물을 보여주기 위해 pandas로 출력하고

text의 경우에는 그냥 출력하는 형태로 사용했습니다

 

이제 코드를 실행해봅시다

 

text, csv 파일의 내용이 모두 나오는 걸 확인할 수 있습니다

 


파일 지우기

 

이제 파일을 지워보겠습니다

 

# s3.py

import boto3
import os
import io
import pandas as pd

AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_BUCKET_NAME = os.environ['AWS_BUCKET_NAME']

file_name_list = ["a.text", "b.csv"]

def connection_s3():
    """
    connection aws s3 user

    Returns:
        s3_client: aws s3 user
    """    
    try:
        print("connection_s3 start")

        s3_client = boto3.client(service_name="s3",
                            aws_access_key_id=AWS_ACCESS_KEY_ID,
                            aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

        return s3_client
    except Exception as e:
        print(e)
        raise
    finally:
        print("connection_s3 end")


def upload_file_def(s3_client):
    """
    s3 upload file -- txt, csv etc

    Args:
        s3_client (aws user): aws s3 user
    """    
    try:
        for file_name in file_name_list:
        #                           올릴 파일이름,  버킷 이름,      버킷에 저장될 파일 이름
            s3_client.upload_file(f"./{file_name}", AWS_BUCKET_NAME, f"{file_name}")
            print(f"{file_name} upload success")
    except Exception as e:
        print(e)
    finally:
        print("upload_file_def end")


def read_file_def(s3_client):
    """
    s3 file read

    Args:
        s3_client (aws user): aws s3 user
    """    
    try:
        
        for file_name in file_name_list:
            file_n, file_type = file_name.split(".")

            obj = s3_client.get_object(Bucket=AWS_BUCKET_NAME, Key=file_name)

            body = obj["Body"].read()

            if file_type == "csv":
                df = pd.read_csv(io.BytesIO(body))
                print(df)
            elif file_type == "text":
                print(body)

            print(f"{file_name} read success")
    except Exception as e:
        print(e)
        raise
    finally:
        print("read_file_def end")


def delete_file_def(s3_client):
    """
    s3 file delete

    Args:
        s3_client (aws user): aws s3 user
    """    
    try:

        for file_name in file_name_list:
            s3_client.delete_object(Bucket=AWS_BUCKET_NAME, Key=file_name)
            print(f"{file_name} delete success")

    except Exception as e:
        print(e)
        raise
    finally:
        print("delete_file_def end") 


if __name__ == "__main__":
    try:

        s3_client = connection_s3()
        upload_file_def(s3_client)
        read_file_def(s3_client)
        delete_file_def(s3_client)
    except Exception as e:
        print(e)
    finally:
        print("bucket finish")

 

delete_file_def라는 함수를 하나 생성했습니다

 

말 그대로 버킷 안에 있는 파일을 지우는 역할을 하는 함수입니다

 

이제 파일을 실행해보겠습니다

 

실행 결과가 이렇게 나오면 성공입니다

 

 

aws에서 확인해보면 객체가 전부 지워진 것을 확인할 수 있습니다

 

728x90
반응형

댓글