티스토리 뷰
Get FTP files on jupyter and save S3
특정 FTP서버의 매시 10분마다 생성되는 특정 파일들을 가져와서 임시 저장하고 S3에 저장하는 코드 일부분이다.
#-*- coding: utf-8 -*-
from ftplib import FTP
import sys
import logging
import platform
import os.path
import boto3
from datetime import datetime, timedelta
logger = logging.getLogger()
logger.setLevel(logging.INFO)
filename = "FILE_" + (datetime.now()- timedelta(minutes=10)).strftime("%Y%m%d%H")+".txt"
if platform.system() == "Linux":
paths = "SERVER PATH"
else:
paths = "LOCAL PATH"
if os.path.exists(paths+filename):
pass
else:
try:
ftp = FTP('FTP-IP',"name", "password")
ftp.cwd('FTP path')
locals = os.path.join(paths, filename+".txt")
try:
load_data = open(locals)
except IOError:
load_data = open(locals, "wb")
ftp.retrbinary('RETR %s' % filename, load_data.write)
logger.info("download FTP - %s" %(filename))
load_data.close()
except:
logger.error('FTP Error - %s' %(filename))
raise Exception("FTP - Server Some Error")
folder_dir = datetime.now().strftime("%Y%m%d")+"/"
s3 = boto3.resource('s3', 'ap-northeast-2')
# upload data
with open(paths+filename, 'rb') as data:
s3.Bucket('BUCKET-NAME').put_object(Key="AWS"+folder_dir+filename+".txt", Body=data)
logger.info("upload file S3 - %s" %(filename))
%time
#CPU times: user 3 µs, sys: 1e+03 ns, total: 4 µs
#Wall time: 6.91 µs
로컬에서는 빠른 속도로 나오는 걸 보니 서버에서 돌려도 괜찮은가 보다?! (사실 해봐야알지...)
로컬에서 테스트할 때 (Jupyter) 가장 귀찮은 점이 바로 Path 설정이다. 매번 서버와 로컬에서 비교할 때마다 Path 값을 바꿔줘야하는데,
(심하게 귀찮아서) 그냥 os적으로 platform 이름이 다른 두 경우로 Path를 설정해줬다. 이로써 로컬이나 서버나.... 알아서 처리되니까
if platform.system() == "Linux":
paths = "SERVER PATH"
else:
paths = "LOCAL PATH"
cron-job을 이용해서 매시 10분마다 코드를 돌려서 해당 데이터를 가져오도록 한다.
귀찮으니 로그는 매번 다찍어버리고,(원래는 로그찍기 안했....)
서버에 가져왔으면 이제 S3에 업로드하는 것을 보자.
folder_dir = datetime.now().strftime("%Y%m%d")+"/"
s3 = boto3.resource('s3', 'ap-northeast-2')
# upload data
with open(paths+filename, 'rb') as data:
s3.Bucket('BUCKET-NAME').put_object(Key="AWS"+folder_dir+filename+".txt", Body=data)
logger.info("upload file S3 - %s" %(filename))
boto3 라이브러리 불러와서 S3와 연결하고 아까 불러온 파일을 S3 버켓에 넣는다. (자~알 들어간다~ 후루룩~)
'[Python] Notebook' 카테고리의 다른 글
[Python] fwrm 서비스 개발 및 코드 리뷰(1) (0) | 2017.03.07 |
---|---|
[Python] 라이브러리 활용(뉴스잼 - 파이콘 2016 ) (0) | 2017.02.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- uWSGI
- jupyter
- CocoaPods
- pycon
- app
- 개발
- lib
- OpenAPI
- css
- Django
- 기상청
- 파이썬
- Python
- nginx
- grib
- swift3.0
- admin
- project
- API
- FTP
- boto3
- lambda
- AWS
- Swift
- code review
- s3
- serverless
- IOS
- Apple
- ubuntu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함