IT/python 48

[python] "1m" 등의 문자열을 받아 시간으로 변환하기

제목과 같은 상황이 필요해서 찾아봤지만 pandas.Timedelta() 를 제외하고는 찾아보기 힘들었습니다. pandas 모듈을 쓰지 않으면 수동으로 파싱하는 루틴을 만들어야 했습니다. 그래서 편하게(?) 이용할 수 있는 방법을 찾고 또 테스트했습니다. import pandas import datetime def str_to_timedelta(delta: str = None): if not str: return ptd = pandas.Timedelta(str) td = pandas.Timedelta.to_pytimedelta(ptd) return td def str_to_timedelta2(delta: str = None): if not str: return return pandas.Timedelta(..

IT/python 2022.09.28

[python3] 파일 목록 정렬해서 가져오기

기록용으로 남깁니다. os.listdir() 함수로 파일 목록을 가져왔는데 정렬이 되어 있지 않았습니다. 이름대로 반환되는 결과물이 리스트일꺼라고 생각하고 os.listdir().sort() 를 호출했는데 Nonetype 은 sort 할 수 없다는 오류가 떳습니다. 인터넷을 뒤져서 sorted(os.listdir()) 로 원하는 결과는 얻었습니다. 다만, 왜 안되는지는 정확히 알 수 없었습니다. 알게 되면 글 내용을 업데이트하겠습니다. 추정하기로는 iterable 한 객체가 os.listdir() 에서 반환되고 있고, .sort() 는 이를 지원하지 못하고 sorted() 는 이를 지원할 수 있다?? 정도인데 절대로 사실이 아닐 확률이 높을 수 있으니 이유는 각자 찾아보시기 바랍니다.

IT/python 2022.08.18

[python3][opencv][windows 10]개발 환경 구축하기

라 쓰고 간단한 나만의 해결 기록이라 읽음.. 그냥 pip3 로 opencv-python 을 설치하거나 opencv-contrib-python, opencv-python-headless 등의 패키지로는 전혀 해결이 안되었습니다. import cv2 만 실행해도 오류가 발생했었거든요... (venvimg) D:\Users\JHG\Documents\work\wiznet\project\SKP\ARHIS\AI\30034>python3 -c "import cv2" Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'cv2' (venvimg) D:\Users\JHG\Documents\work\wizne..

IT/python 2022.07.22

[python] 파일 업로딩용 http 서버 예제

기록용으로 남깁니다. 윈도우 서버에서 파일 업로딩이 급할 때 쓸 수 있는 http file server 라는 프로그램이 있습니다. 문제는 이 프로그램이 공유기 상의 포트포워딩을 사용하는 환경에서 잘 동작하지 않습니다. 제공되는 웹페이지에 직접 들어가서 하나 하나 업로드하는 것은 가능하지만 클라이언트 쪽에서 curl 등을 통해 자동 업로드 하는 데에는 문제가 있었습니다. 공유기의 DMZ 기능을 쓸 수 있는 상황도 아닙니다. 인증이 필요없이 잠깐 열었다 닫는 파일 업로딩 용도이고, cli 상에서 실행 가능하여 자동화할 수 있어야 하며, 파일 이름을 변경할 수 있는 기능(원본 aa.png 를 1111-aa.png 로 변경)까지 제공되야 하고, 공유기 환경에서도 동작해야하는데, 그 기능들을 모두 만족하는 프로그..

IT/python 2022.04.12

[python] SystemError: new style getargs format but argument is not a tuple 오류

보통 여러 개 원소 지정할 때 마지막에 쉼표를 붙이던게 버릇이 되서 발생한 실수를 기록용으로 남깁니다... def writebuffer(bufidx): pass def abcd(): buflen = 0 t1 = threading.Thread(target=writebuffer, args=(buflen,)) 이 코드를 실행하면 제목과 같은 오류가 발생합니다. 뭐가 잘못일까 하고 전체 코드를 주석처리해보고 하다가 (buflen,) 때문에 발생한 것을 알게 되었습니다. Thread 함수에 파라미터가 한 개인 함수를 부를 때는 그저 args=(var) 하면 되었을 것을... 이것으로 소비한 시간이 너무 길어서 허탈하네요.

IT/python 2022.01.13

[python] magic number

기록용으로 남깁니다. 파이썬이 실행되어 생성되는 *.pyc 파일에는 사용된 파이썬 버전 정보가 파일 맨 처음 4바이트에 저장되어 있습니다. 보통은 bad magic number 등의 문제가 생기면 *.pyc 파일을 지우고 재생성하면 되는데 그렇지 못한 상황을 위해 기록으로 남깁니다. 문제가 되는 pyc 파일의 첫 4바이트를 little endian 으로 직접 읽어서 확인하셔도 되고, 정상적으로 접근 가능한 환경이 있는 경우에는 코드로 확인하셔도 됩니다. # python 2.x 대 import imp imp.get_magic().encode('hex') 'd1f20d0a' # python 3.x 대 import importlib importlib.util.MAGIC_NUMBER.hex() '420d0d0a..

IT/python 2021.10.05

[python][virtualenv] 이미 가상 환경이 구축된 이후 설치된 전역 패키지 가져오기..

기록용으로 남깁니다. virtualenv 를 사용하다 보니 왠만한 것은 source ~/wiznet/venvA/bin/activate 한 다음에 정상적으로 pip3 로 설치 가능하지만 apt 패키지로 제공되는 것들은 root 계정 권한으로 설치되기 때문에 이미 virtualenv 를 구성한 다음에는 이를 자동적으로 참조할 방법은 없습니다. 현재 확인한 방법으로는 이를 찾아서 수동으로 복사하는 것입니다. 일단 제가 설치한 apt 패키지는 rpi.gpio 패키지입니다. sudo apt install rpi.gpio 전역 저장소를 찾습니다. find /usr -name 'site-packages' /usr/lib/pypy/lib-python/2.7/site-packages /usr/local/lib/pytho..

IT/python 2021.09.13

[python3] a bytes like object is required not 'str' 오류

기록용으로 남깁니다. 제목과 같은 오류 발생시 split() 등의 함수를 사용할 때 나타날텐데 넘어온 값이 str 이 아니라 bytes 로 되어 있어서 발생하는 오류입니다. 혹시 모르니 type 으로 자료형을 확인하거나 print 로 직접 출력해서 bytes 로 되어 있는 것을 확인해봅시다. bytes -> str 은 간단합니다. string_variable.decode() 하면 str로 변환됩니다. 이 결과물에 split()을 하던 다른 함수를 사용하면 되겠습니다.

IT/python 2021.07.16

[python] 윈도우10에서 python.exe 실행 경로 확인하기

venv 나 virtualenv 를 쓸 때 내 환경이 내가 지정한 env 에 잘 연결되었나 확인하고 싶을 때가 있습니다. 참고 글에 따르면 sys.path 를 출력해보면 알 수 있다고 합니다. 다만 vscode 기준 해당 폴더의 터미널에서 python3 를 실행시켜서 출력해보면 여전히 전역 python 경로가 출력됩니다. python3.exe 자체가 PATH 가 전역으로 잡혀있는 바이너리로 실행이 되었기 때문인데요 해당 테스트 코드를 cmd 상에서 하지 않고 빈 .py 파일을 만들어서 해당 코드에서 확인하면 현재 venv 에 포함된 경로를 의존하고 있음을 확인할 수 있습니다. import sys for p in sys.path: print(p) # or just sys.path # print(sys.pa..

IT/python 2021.07.01