실수 x가 0보다 크거나 같을 때 소수점 n째 자리에서 버림, 올림을 하는 방법을 알아보겠습니다. 먼저, math의 floor와 ceil에 대해서 간단하게 알아봅시다. floor는 x보다 작거나 같은 수 중, 가장 큰 것을, ceil은 x보다 크거나 같은 정수 중 가장 작은 것을 돌려줍니다. -1.3이 있습니다. 이것보다 작거나 같은 수들에는 -2, -3, ... 이 있습니다. 이들 중 가장 큰 것은 -2이니, floor(-1.3)은 -2가 리턴됩니다. -1.3보다 큰 것은 -1, 0, 1 .. 이 있습니다. 이 중, 가장 작은 것은 -1이므로 ceil(-1.3)은 -1이 됩니다. 다음에 -1보다 작거나 같은 수는 -1, -2, ... 가 있어요. 이 중 제일 큰 것은 -1이니 floor(-1)은 -1이..
python 검색 결과
안녕하세요. 장고에서 bulk create 함수를 쓰다가 알게된 itertools의 islice 함수에 대해 간단하게 소개해 보겠습니다. 먼저, islice는 iterator를 리턴합니다. 이 iterator의 next() 메소드가 iterable로부터 선택된 값들을 리턴합니다. 이게 무슨 이야기인지 밑에서 후술하도록 하겠습니다. iterable, start, stop, step 요래 받으면, start로부터 step만큼 증가하는 iterator를 리턴하게 됩니다. step이 0보다 큰 정수라면 어디까지 증가할까요? stop 미만까지 증가합니다. 예제를 몇 개 보면서 이해해 보겠습니다. gen에는 [3, 5, 7, ... , 23]이 저장되어 있습니다. islice의 iterable한 것은 list인 g..
날짜와 시간을 처리할 때 많이 쓰던 strptime과 strftime에 대해서 알아봅시다. 형식 코드들은 상당히 많으니, 이 문서를 참고해 보셔도 좋을 듯 합니다. 먼저 strptime은 string을 파싱해서 datetime object로 돌려주는 역할을 합니다. 이 작업이 왜 중요한 건가? datetime으로 변환을 하면, 특정 날짜로부터 몇 일이 지났는지도 구할 수 있고, 두 날짜의 차이도 구할 수 있기 때문입니다. 이 strptime은 인자를 2개 받는데요. 하나는 string, 다른 하나는 format을 의미하는 string입니다. 이제, YYYY-MM-DD hh:mm:ss 꼴로 들어왔다면, format string은 "%Y-%m-%d %H:%M:%S"로 받아주면 됩니다. 예제를 하나 보겠습니다..
pickle을 loads할 때 신뢰할 수 없는 데이터는 절대로 언피클하지 말라고 되어 있습니다. 왜 그럴까요? 문서의 이 부분에서도 잠깐 언급되는 부분이지만, os.system과 같은 함수들을 수행되게 할 수 있기 때문입니다. 문서에 나온 코드를 조금 응용해서 실습해 보겠습니다. 먼저, b"cos\nsystem\n(S'rm -r *.txt'\ntR."이 pickle.loads의 인자로 들어왔습니다. 해당 python 파일을 실행시켜 보겠습니다. 실행 전과 후를 비교해 보면, txt 파일이 죄다 사라졌음을 볼 수 있습니다. 이것만 봐도 그냥 깡으로 필터링 없이 처리하면 얼마나 위험한지 알 수 있습니다. pickletools의 dis를 이용하면, 해당 byte가 어떻게 해석되는지를 보여줍니다. 요렇게 해석이..
안녕하세요. 이번 시간에는 shutil의 rmtree와 os의 rmdir에 대해서 간단하게 알아보겠습니다. 먼저, rmtree는 폴더 안에 있는 내용들을 재귀적으로 삭제합니다. 현재, 제 working directory에는 디렉토리 a와 디렉토리 b가 있습니다. 각각의 디렉토리 안에는 1.txt가 있어요. 여기서, 우리는 디렉토리 "a"에 있는 것들을 모두 삭제하려고 해요. 이 때, shutil의 rmtree를 쓰시면 됩니다. test.py의 2번째 줄은, 디렉토리 a와 a 안에 있는 것들을 재귀적으로 삭제합니다. 뭔가 위험해 보이네요. 그런데, 3번째 줄에, shutil.rmtree.avoid_symlink_attacks가 있는데요. 이것을 출력하고 있어요. 이 값이 True인 경우, 구현이 심볼릭 링..
최근댓글