함수 이름으로 함수 호출하기
·
Python
함수 이름을 알고 있을 때, 그 이름으로 함수를 호출하고 싶을 때가 있습니다. 예를 들어, 함수의 이름이 tokenize 일 때 이 함수를 어떻게 호출할 수 있을까요? 당연히 아래와 같이 호출합니다. tokenize() 너무나 당연하죠. 그런데 가끔 다르게 호출하고 싶을 수도 있습니다. 이렇게요. f = getattr(sys.modules[__name__], 'tokenize') f() 굳이 왜죠. 왜 이렇게 어렵게. 프로그램 실행 중 동적으로 함수 이름을 알아내고, 이 함수를 호출해야 할 때가 있습니다. 예를 들어 한국어 토큰의 단위는 뭐가 좋을까? 에서 tokenize_by_morpheme_jaso, tokenize_by_morpheme_char, tokenize_by_eojeol_jaso, toke..
Shell 명령의 결과를 받아오고 싶을 때
·
Python
파이썬 코딩을 하다 보면 이미 필요한 기능이 리눅스 명령으로 존재할 때가 있습니다. 가끔은 리눅스 명령을 실행해서 결과를 가져오는 것이 편할 때가 있죠. 물론 이 방법은 해당 명령이 해당 시스템에 설치되어야 있어야 하기 때문에 이식성이 조금 떨어집니다. 하지만 적절히 필요한 곳에 쓴다면 개발 속도를 확 높여 줄 수 있습니다. 예를 들어 어떤 텍스트 파일이 몇 줄인지 궁금할 때가 있습니다. 파일을 열고, 줄 별로 읽어서 카운트를 할 수도 있지만, 리눅스의 wc 명령을 간편하게 이용할 수도 있습니다. 속도도 매우 빠르고요. import subprocess result = subprocess.run(['wc', '-l', 'wiki+namu.raw.txt'], stdout=subprocess.PIPE) res..
간편한 Progress Bar 모듈 - tqdm
·
Python
큰 데이터를 다루다 보면 지금 프로세싱이 어디까지 처리됐는지 궁금할 때가 있습니다. 텍스트 파일에서 한 줄씩 읽어서 전처리를 할 때도 그렇고요. 데이터를 여기에서 저기로 옮길 때도 그렇고요. 시간이 너무 오래 걸리다 보면 '어딘가에서 무한루프를 돌고 있는 것은 아닐까', '코드를 잘못 짜서 한번 도는데 너무 오래 걸리는 것이 아닐까' 등등 많은 생각이 듭니다. 불안한 마음에 Ctrl+C를 확 눌러버릴까 유혹도 받지요. 자리를 잠시 비우기도 애매하고요. 꼭 자리를 비울 때 에러를 내고 죽으니까요. 가상의 상황을 가정해서 아래처럼 한번에 0.05초가 걸리는 작업을 100번 돌린다고 생각해보겠습니다. 이 경우야 5초면 끝나겠지만 큰 데이터를 다루다 보면 도대체 언제 끝날지 감이 안 올 때가 많습니다. 그리고 ..