오지's blog

s3에서 가장 최근 업로드한 파일 찾기 - sorted 연습 python 본문

개발노트/Python

s3에서 가장 최근 업로드한 파일 찾기 - sorted 연습 python

오지구영ojjy90 2023. 4. 13. 15:31
728x90
반응형

s3의 특정버킷내 stackoverflow를 보면서 아름다운 코드를 발견하여 이에 기록하게 되었다.

 

https://stackoverflow.com/questions/45375999/how-to-download-the-latest-file-of-an-s3-bucket-using-boto3

 

How to download the latest file of an S3 bucket using Boto3?

The other questions I could find were refering to an older version of Boto. I would like to download the latest file of an S3 bucket. In the documentation I found that there is a method

stackoverflow.com

 

 

prac1. sorted함수 연습

dict형태의 list가 있을때 이를 정렬할수가 있는데 이 기능을 제공하는 python 내장함수 sorted함수가 있다. 

 

dict_list = [{"name":"kelly", "gpa":"4", "dept":"computer science"},
             {"name":"dick", "gpa":"2", "dept":"piano"},
             {"name":"dana", "gpa":"3", "dept":"mechanical engineering"},
             {"name":"issac", "gpa":"4.5", "dept":"medicine"},
             {"name":"eden", "gpa":"2.5", "dept":"nuclear engineering"}]

sorted_gpa = sorted(dict_list, key=lambda dict_val:dict_val['gpa'], reverse=False)
lowest_gpa = sorted_gpa[0]
highest_gpa = sorted_gpa[-1]
print(f"lowest_gpa: {lowest_gpa}, highest_gpa:{highest_gpa}, sorted_gpa: {sorted_gpa}")

 

prac2. 가장최근 오픈한 약국이름은?

공공데이터포털에서 약국정보를 얻어온다. list내 dict형식으로 되어 있는 데이터를 설립일로 desc형식으로 sort하여 첫번째 요소를 가져온다.

 


import requests
res = requests.get(url="https://apis.data.go.kr/B551182/pharmacyInfoService/getParmacyBasisList?_type=json&serviceKey=key값")
print(res.text)
json_data = json.loads(res.text)
print(json_data['response']['body']['items']['item'])
pharmacy_list = json_data['response']['body']['items']['item']
latest_open_pha = sorted(pharmacy_list, key=lambda val:val['estbDd'], reverse=True)[0]
print(latest_open_pha)

이 코드는 문제가 잇다.

api첫번째 페이지 즉 100개중 최근 오픈한 약국을 보여주는 것이다.

for문을 돌려 append하여 append한 리스트를 기반으로 sort하면 된다.

 

 

 

prac3. aws의 특정 버킷내에 최근 업로드한 파일

    s3client = boto3.client('s3'
                            , aws_access_key_id=AWS_ACCESS_KEY_ID
                            , aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

    prefix = 버킷내 특정폴더/특정폴더내 특정폴더
    print(prefix)
    s3client = s3client.list_objects_v2(Bucket=AWS_BUCKET_NAME, Prefix=prefix)
    print(s3client)
    latest_file = [obj for obj in sorted(s3client['Contents'], key=lambda obj:obj['LastModified'], reverse=True)][0]

 

 

 

이 코드에 주목하자

[obj for obj in sorted(s3client['Contents'], key=lambda obj:obj['LastModified'], reverse=True)][0]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments