본문 바로가기

파이썬

파이썬, 월별 시작날짜와 마지막 날짜 구하기 2019년 1월부터 12월까지, 매달 첫째날과 마지막날을 구해야 한다고 가정해보자. 1월은 20190101, 20190131 이 될 것이고, 2월은 20190201, 20190228이 될 것이다. 이렇게 월마다 달라지는 마지막날을 계산해서 구하는 것이 포인트 이다. from datetime import datetime from datetime import timedelta from dateutil import relativedelta # 시작날짜 yyyymmdd = datetime(2019, 1, 1, 0, 0, 0) for i in range(12): # 한달뒤의 첫날을 구한다 yyyymmdd = yyyymmdd + relativedelta.relativedelta(months=1) # 다음달 첫날에서.. 더보기
파이썬 > 멀티쓰레드로 분산DB 접속하기 데이터 양이 엄청많으면 데이터베이스를 여러대로 분산해서 관리하게 되는데, 이럴 때 각 분산DB로 부터 반복적으로 쿼리로 조회해서 데이터를 수집해야할 일이 자주 생긴다. 이럴때 만약 DB가 총 20대라면, 순차적으로 쿼리를 날리게 되면 1분씩만 걸려도 총 20분이 소요되어야 하나의 쿼리를 날리게 된다. 그런데 멀티쓰레드로 작동하게 된다면 가장 오래 걸리는 DB한대의 쿼리 시간이면 모든 작업을 수행할 수 있게 되어서 엄청나게 작업시간을 단축시킬수 있다. 파이썬으로 멀티쓰레드 작동하는 방법을 알아보자. def util_query_to_all_dist_multithread(sql): threads = [] rows = [] start = datetime.now() for i in range(1, LAST_SER.. 더보기
파이썬, 문자열 -> date 타입으로 파이썬에서 날짜데이터를 문자열로 갖고 있을 때 이를 date타입으로 변환해서 연산을 한 후에 다시 문자열로 전환해야할 경우들이 종종 있다. 이럴때 어떤 함수를 활용하면 되는지 간단하게 알아보자. yyyymmdd = '20191209' ndays = 7 yyyymmdd_d = datetime.strptime(yyyymmdd, "%Y%m%d").date() yyyymmdd_1_ago = yyyymmdd_d - timedelta(days=1) yyyymmdd_n_ago = yyyymmdd_d - timedelta(days=ndays) print(yyyymmdd_1_ago.strftime('%Y%m%d')) print(yyyymmdd_n_ago.strftime('%Y%m%d')) 주어진 문자열은 '2019120.. 더보기
파이썬, in조건 잘라서 요청하기 DB가 분산되어 있을 때 한쪽에서 아이디 리스트를 구하고, 다른쪽 DB에서 아이디를 조건으로 또 다른 값을 구하려고 할 때 만약 아이디 리스트의 갯수가 엄청 많다면 (가령 3만개) 두번째 쿼리를 날릴때 고민이 됩니다. 하나씩 날리자니 쿼리를 3만번 호출해야하고, 그렇다고 3만개를 묶어서 하나의 스트링으로 in 조건으로 걸자니 메모리가 꽉 차서 수행을 할 수 없게 됩니다. 이럴때는 일정 갯수 단위로 (가령 1000개) 아이디를 잘라서 in 조건을 걸면 편리하게 수행할 수 있어요 # 엄청 많은 건수의 데이터 조회를 해야할 때... index = 0 totalcount = len(idlist) for i in idlist: index += 1 id = i if (idstr!=""): idstr += "," i.. 더보기
리스트 랜덤 샘플링 리스트에 데이터를 담아두고 그중에서 N개의 데이터를 랜덤샘플링 하고자 할 때 아래와 같은 방법으로 할 수 있다. import random # (1) 숫자리스트 샘플링 numlist = [1,2,3,4,5,6,7,8,9] s = random.sample(numlist, 3) print(s) # [1, 2, 8] # (2) 튜플 샘플링 frutes = ('사과', '귤', '포도', '배') s = random.sample(frutes, 2) print(s) # ['배', '사과'] http://pythonstudy.xyz/python/article/509-%EB%82%9C%EC%88%98-random 예제로 배우는 파이썬 프로그래밍 - 난수 (random) 난수 (random) 파이썬에서 난수(random.. 더보기
파이썬으로 한글 URL 인코딩하기 URL에 한글이 포함되어 있고, 공백문자가 가운데 포함되어 있을 때는 한글 부분을 URL인코딩 처리해주는 작업이 필요합니다. 가령 아래와 같은 경우입니다. "https://notice.tistory.com/category/" + "새로운 소식/업데이트 소식" 이렇게 두개의 문자열을 합하면 URL이 만들어지죠. 이럴때 앞부분은 쓰면 되지만 뒷부분 한글 부분을 URL인코딩해서 붙여주면 됩니다. 아래 샘플 코드를 볼게요. from urllib import parse url = "https://notice.tistory.com/category/" + parse.quote("새로운 소식/업데이트 소식") 이렇게 하면 아래와같이 url 스트링이 구성됩니다. https://notice.tistory.com/categ.. 더보기
파이썬에서 curl 호출하기 API가 호출하는 코드를 curl 방식으로 공유를 받았고 이를 파이썬에서 구현해야 한다면 아래와 같이 하면 됩니다. curl -XPOST http://a.b.com/api\ -H 'Content-Type: application/json'\ -d '[ { "name1": value1, "name2": value2, "name3": value3 }, ... ]' 아래는 파이썬 코드 입니다. data = list() for i in rows: post_dict = dict() post_dict["name1"] = value1 post_dict["name2"] = value2 post_dict["name3"] = value3 data.append(post_dict) response = requests.post(.. 더보기
dict에서 키로 정렬하기 mydict = {'carl':40, 'alan':2, 'bob':1, 'danny':3} for key in sorted(mydict): print "%s: %s" % (key, mydict[key]) dict에서 키값으로 정렬하고프면 위와 같이하면 제일 간단한다. 아래는 결과. alan: 2 bob: 1 carl: 40 danny: 3 만약 역순으로 정렬하고프면 이렇게 하면 된다. sorted(mydict, reverse=True): 더보기