목록Python/Python (24)
규도자 개발 블로그
[Python] csv를 dict로 가끔씩 csv로 저장된 요소들을 불러와서 dict로 써야할 때가 있다. 특히 dbeaver나 mysql workbench처럼 결과값을 간단하게 csv형태로 저장할 수 있는 어플리케이션을 다룰 때 많이 필요하더라. 먼저 코드는 아래와 같다. import csv mydict = {} with open('csv_example.csv', mode='r') as file: reader = csv.reader(file) attrs = [] result = [] for row in reader: if len(attrs) < 1: attrs = row continue temp_row_dict = dict() for key, value in zip(attr..

파이썬 스크립트 terminal에서 실행할 때 ModuleNotFoundError 해결하기 어떤 프로젝트에서 cron이나 migrate tool 등을 커스텀해서 만들어놨다고 시나리오를 짜보자. 이건 프로젝트를 실행할 때 동시에 실행되는 것이 아니라 독립적인 프로세스를 가지고 실행돼야하는 것이다. 구체적인 예를 들어보자. 이건 어떤 framework로 작성한 프로젝트 혹은 뭔가 만들기 위해 체계적으로 작성한 프로젝트가 아니라 내가 그냥 개인적으로 필요한 작업들을 파이썬으로 작성해놓은 것이다. 개중에는 크롤러도 있고, api요청으로 정보를 가져오는 것 그리고 데이터베이스에 쓰는 것, 엑셀로 내뱉는 것 등등 아주 많다. 이건 하나의 프로젝트로 동작하는 프로그램이 아니라 그냥 내가 필요할 때마다 이것저것 실행하..
Python에서 setInterval함수 쓰기 (특정 시간마다 함수 반복하기) 자바스크립트에는 참 편한 함수가 많다. 그 중 하나인 setInterval인데 이 함수가 뭐냐 하면 특정 함수를 정해진 시간마다 반복해주는 함수이다. 애초에 이 글을 보고 있다는 건 setInterval이 어떤 역할을 하는지 알고 있는 사람일테니 이에 대한 설명은 각설하고 이 함수를 사용하면 된다. import threading def set_interval(func, sec): def func_wrapper(): set_interval(func, sec) func() t = threading.Timer(sec, func_wrapper) t.start() return t 일단 이 함수를 쓰기 전에 python은 GIL이라는 개..
pip 모든 패키지 삭제하기 + xargs명령어 가끔씩 개발을 하다보면 실수로 프로젝트 venv환경이 아닌 System Interpreter로 설치된 python에 패키지를 설치해버릴 때도 있고, 패키지 버전을 바꿔야 하는데 의존성으로 인해 여러개의 패키지가 깔려있는 상태에서 같이 버전을 바꿔줘야 하는 둥 pip로 설치한 모든 패키지를 전부 싹 밀고 다시 패키지를 설치하는 게 속시원할 때가 있다. 그때 쓰면 좋은 명령어다. $ pip freeze | xargs pip uninstall -y 여기서 xargs라는 조금은 생소한 명령어가 있는데 명령어 출력을 다른 명령어의 인자값으로 전달하는 함수이다. 고로 pip freeze명령어를 통해 조회된 모든 패키지 리스트들에 대해서 각 줄마다 pip uninsta..
네 자료형을 관성적으로 쓰고 있었는데 확실하게 짚고 넘어가야할 것 같다. 네 자료형의 공통점과 차이점들이 서로 엮여있기 때문에 다른 사람들이 정리한 여러가지 자료를 봐도 잘 기억에 남지가 않으니까 최대한 한눈에 쉽게 알아볼 수 있게 정리해봤다. 범례 리스트 (List) 튜플 (Tuple) 셋 (Set) 딕셔너리(Dictionary) 선언 [] or list() () or tuple() {} or set() {k: v} or dict(a=1, b=2) 중복 허용 O O X Key는 중복 안됨. Value는 중복 가능. 인덱스로 값 불러오기 O O X Key로 불러와야 함 수정 가능 여부 O X O Value 수정 가능 For문 동작 여부 O O O O 같은 자료형 연산 +로 붙이기 가능 +로 붙이기 가능 ..

파이썬으로 여러 개의 웹소켓에 동시에 연결하기 토이프로젝트로 퀀트 프로그램을 하나 제작하고 있는데 맨 처음에는 각종 거래소에서 제공하는 api를 사용할까 하다가 초당 요청제한이라는 문턱에 걸렸다. 수학모델에 근거해서 전략의 타당성을 검토해야 하는데 수백종류의 암호화폐 데이터를 1초에 한번씩 api로 요청해 저장하려고 하니 터무니 없는 생각이긴 했다. 그렇다고 1분을 쪼개서 요청을 보내자니 엄청난 변동성의 암호화폐시장에서의 수학모델 분석에는 적절하지 않다는 생각이 들었다. 그래서 웹소켓을 찾아보니 다행스럽게도 거의 모든 거래소에서 웹소켓을 지원하고 있더라. 만약에 다양한 플랫폼, 혹은 한 플랫폼에서도 다른 웹소켓 라우트에서 필요한 정보가 있으면 여러개의 웹소켓에 연결할 필요가 있다. 그럴 때 사용하기 좋은..
파이썬 람다(lmbda)란 람다는 "익명함수"를 의미한다. 그럼 또 의문이 든다. 엥? 익명함수가 뭐냐? 익명함수는 함수는 함수인데 기존처럼 함수명을 명명하지 않고도 쓸 수 있는 함수를 의미한다. 기존 함수가 def sum_ab(a, b): return a + b print(sum_ab(1, 2)) # 3 위와 같이 명명하고 사용하는 것과 달리 람다는 sum_lambda = lambda a, b: a + b print(sum_lambda(1, 2)) # 3 이런식으로 변수에 할당해서 사용할 수도 있다. 근데 보통의 함수도 변수에 담아서 사용할 수 있다. def sum_ab(a, b): return a + b print(sum_ab(1, 2)) # 3 test = sum_ab print(test(1, 2)..
이건 내가 실무를 하면서 겪었던 실수 + 실수를 잡아준 고마운 분에 대해서 쓰는 얘기다. 파이썬으로 코딩을 하면서 이런 일이 있었다. 어떤 동작을 하는 함수를 작성해야 하는데 변수 A안에 문자열이 있으면 제대로 변환된 A를 반환하고, 없으면 False를 반환해주는, 그런 코드였다. 그래서 난 간단하게 def 어쩌구(A=False): if A: A = 변환된 문자열 return A 이런 느낌으로 작성했다. 이 코드에서 잘못된 부분이 보이는가? 제목에서 유추할 수 있다시피 A=False가 틀렸다. A에 문자열이 담기기로 했으면 끝까지 문자열이라는 걸 밝혀야 한다. 심지어 문자열이 들어오지 않았을 때 False처리를 해야한다손 쳐도 A에 직접 False를 넣으면 안되고 빈 문자열을 넣어야 한다. 위 코드는 이..
파이썬3(python3)에서 문자열 자르는 함수. split()과 split(' ')의 차이. 일단 split()함수는 괄호에 들어오는 문자를 기준으로 문자열을 리스트로 잘라 리턴하는 함수이다. 따옴표가 있냐 없냐의 차이는 간단하게 표현할 수 있다. split()은 모든 공백을 한번에 처리한다. split(' ')은 이후 공백을 전부 따로따로 처리한다. 간단한 예를 하나 보자. print("a bb ccc dddd ".split()) print("a bb ccc dddd ".split(' ')) a뒤는 스페이스 하나. b 뒤엔 두개. c뒤엔 세개. d뒤엔 네개가 있다. 콘솔창에 출력되는 결과는 이렇다. ['a', 'bb', 'ccc', 'dddd'] ['a', 'bb', '', 'ccc', '', '',..
파이썬 패키지를 독립적으로 테스트하는 방법 + 파이썬 패키지에 대한 기여를 하다. 현재 작업하고 있는 사이트가 있는데 메인터넌스모드가 필요하여 만들까 하다가 혹시나 싶어 https://djangopackages.org/이곳을 뒤져봤는데 역시나 멋드러지게 만들어진 게 있었다. https://djangopackages.org/grids/g/maintenance-mode/ 여기에서 메인터넌스 모드에 대한 패키지들을 살펴볼 수 있는데 "DJANGO-MAINTENANCE-MODE"와 "DJANGO-MAINTENANCEMODE"라는 두 개의 패키지가 1, 2위를 두고 각축을 벌이고 있었는데 (놀랍게도 다른 패키지다) DJANGO-MAINTENANCE-MODE에 내가 별 하나를 더 추가해줘서 1위를 차지하게 됐다. ..