본문 바로가기

python67

[python] 반복적인 입력에는 input() 대신 sys.stdin.readline 로 변경 파이썬에서 데이터를 입력받을 때 input()을 이용한다. input()을 이용하면 프롬프트를 이용한 입력을 받을 수 있고, 형변환이 되는 이점이 있다. 하지만 대량의 데이터를 반복적으로 입력받을 때 input()을 이용하지 않고, sys.stdin.readline() 을 이용하면 성능이 향상된다. 백준 1931 문제를 같은 코드로 입력 함수만 다르게 사용한 결과 아래와 같이 10배의 속도 향상(3928MS -> 336MS)을 얻을 수 있었다. 8954131h1931맞았습니다!!50344 KB336 MSPython 3 / 수정491 B41분 전8953912h1931맞았습니다!!50344 KB3928 MSPython 3 / 수정508 B1시간 전자바에서 Scanner를 이용한 입력보다 BufferedRea.. 2018. 6. 18.
[python] yyyymmdd 일자별 문자열 리스트 생성 방법 일자별로 생성된 데이터의 처리를 위해서 yyyymmdd 형태의 문자열 또는 datetime 객체를 생성하기 위한 코드 조각이다. 3개의 형식으로 1. 시작일자, 종료일자를 입력 받아서 해당 일자 사이의 yyyymmdd 리스트 반환2. 시작일자, 기간을 받아서 시작일자 - 기간의 일자 반환3. 시작일자, 기간을 받아서 시작일자 + 기간의 일자 반환 처리결과 : ['20180501', '20180502', '20180503', '20180504', '20180505', '20180506', '20180507', '20180508', '20180509', '20180510'] 2018. 5. 15.
[python/코드조각] 상속과 부모의 생성자 호출, 메소드 재정의 파이썬의 클래스는 상속이 가능하다. 상속하여 부모 클래스의 메소드를 재정의하는 것도 가능하다. 상속하는 방법과 부모 클래스의 생성자 호출은 다음과 같다. 추가로 파이썬 3.1 부터는 다음의 방법도 가능하다고 한다. 2018. 5. 10.
[python/코드조각] 파이썬 클래스의 __getattr__, __setattr__ 속성 활용 파이썬의 클래스는 애트리뷰트를 저장할 수 있는 특수 함수 __dict__ 를 가지고 있다. 이 속성에 클래스의 자체 애트리뷰트를 저장할 수 있다. 그리고 특수 함수 __getattr__, __setattr__ 를 이용하여 해당 값을 가지고 온다. 사용자가 클래스를 생성할 때 이 값들을 오버라이딩하여 재정의 할 수도 있다. https://docs.python.org/3/reference/datamodel.html https://ziwon.github.io/posts/python_magic_methods/ 2018. 5. 9.
[python/코드조각] open() 을 이용하여 파일 읽기 파이썬의 open() 함수와 with 구문을 이용하여 파일을 효율적으로 읽는 방법은 다음과 같다. 2018. 5. 9.
[python] 현재폴더의 파일이름, 파일명 일괄 변경하기 현재 폴더의 파일명을 일괄로 변경하는 스트립트는 다음과 같다. os의 rename(), listdir() 함수를 이용한다. 2018. 4. 23.
[python] [bs4] BeautifulSoup([your markup]) 경고 수정하기 bs4는 파이썬의 기본 파서도 지원하지만 외부의 서드파티 파서도 지원한다. lxml, html5lib 등의 파서를 지원한다. 다음의 오류는 파서를 지정하지 않아서 발생하는 오류이다. 파이썬 기본 파서를 사용하려면, "html.parser"를 지정하면 된다. lxml 을 이용하기 위해서는 pip를 이용하여 설치를 해야 한다. 설치는 "pip install lxml" 으로 하면된다. UserWarning: No parser was explicitly specified, so I'm using the bestavailable HTML parser for this system ("html.parser"). This usually isn't aproblem, but if you run this code on an.. 2017. 12. 10.
[python] multiprocessing 을 이용한 스레드 처리 파이썬은 GIL때문에 멀티 스레드를 처리할 수 없다. 그래서 multiprocessing 모듈을 이용하여 동시 처리를 가능하게 한다. https://docs.python.org/3.5/library/multiprocessing.htmlhttps://pymotw.com/2/multiprocessing/basics.html 2017. 12. 7.
[python] GIL(Global Interpreter Lock) GIL은 한번에 하나의 스레드만 수행할 수 있게 인터프리터에 락(Lock)을 거는 것.이로 인해 파이썬 인터프리터 구현의 편의성, 개발의 편의성이 생겼다. GIL을 피하기 위해서 Multiprocessing 모듈을 이용하면 된다. 파이썬의 GIL은 한번에 하나의 스레드만 동작 할 수 있도록 파이썬 인터프리터에 락이 걸리는 것이다. 이로 인해서 스레드를 이용하여 프로그램을 구현하여 동시에 여러가지 작업을 진행하여도,한번에 하나의 작업만 돌게 되어서 실제로는 작업시간이 더 늘어나는 결과를 가져온다. 이렇게 구현이 된이유는 다음과 같다. 공유자원에 대한 처리를 간단하게 하기 위해서GC를 만들기 편하기 때문에 C/C++ 확장 모듈 개발의 편리성 다음의 두개의 자료를 읽어보면 더욱 확실하게 이해할 수 있을 것이다.. 2017. 11. 21.
[python] 문자열을 효율적으로 concat 하는 방법 파이썬에서 문자열을 효율적으로 concat 하는 방법을 찾아보다가 좋은 사이트를 발견해서 스크랩 해본다. 원문에서 방법 4, 5, 6을 추천하고 있다. 방법 6이 가장 빠르기 때문에 많이 사용하고,방법 4는 처리시 문자열을 변환하려고 할 때 유연하게 적용이 가능하다. 방법 5는 가상 파일을 이용하기 때문에 메모리 사용량에 있어서 가장 효율적이다. 방법 4, 6 의 경우 리스트릴 이용하기 때문에 문자열이 많아지면 메모리 사용량이 늘어날 수 있다. https://waymoot.org/home/python_string/http://blog.leekchan.com/post/19062594439/python%EC%97%90%EC%84%9C-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-stri.. 2017. 2. 22.
[python] range, xrange 함수 사용법 파이썬에서 숫자로 일정구간을 반복하기 위해서, range()와 xrange() 함수를 제공한다. 동작에는 차이가 없지만, 세부적으로 range()는 리스트 객체를 반환하고, xrange()는 xrange 객체를 반환한다. range()는 리스트 객체를 생성하여 반환하기 때문에 숫자가 커질수록 메모리 사용량이 많다.xrange()가 반환하는 xrange 타입은 제네레이터이다. 따라서 필요할 때 숫자를 생성하기 때문에 메모리 사용량은 일정하다. * 모바일 환경이나 메모리가 제한적인 상황에서는 xrange()를 사용하고, 만약 배열을 여러번 순환해야 한다면 range()를 사용하는 것이 더 좋을 것이다. 사용방법은 다음과 같다. #!/bin/python# -*- coding:utf-8 -*- def range.. 2017. 2. 22.
[python][error] 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UX 오류 수정 'unicodeescape' codec can't decode bytes in position 2-3: truncated \U 파이썬에서 파일을 읽기 위하여 파일의 경로를 지정하는 도중에 경로상에 \u, \U 가 있으면 위와 같은 오류가 발생한다. 파이썬은 특수 문자를 \ 로 시작하여 인식하기 때문에 위와 같은 오류가 발생한다. 특수 문자 목록은 다음과 같다. * \u, \U는 유니코드를 나타내는 특수 문자이다. Escape SequenceMeaningNotes\newlineIgnored \\Backslash (\) \'Single quote (') \"Double quote (") \aASCII Bell (BEL) \bASCII Backspace (BS) \fASCII Formfeed (FF) \nAS.. 2017. 1. 23.
[python][error] PermissionError: [Errno 13] Permission denied: ... PermissionError: [Errno 13] Permission denied: 파이썬에서 파일을 오픈하려고 할때 위와 같은 오류가 발생할 때가 있다. 이오류는 다음의 경우에 발생한다. - 파일을 오픈할 수 있는 권한이 없을때.- 파일이 아니라 폴더를 지정했을 때.- 파일이 없을때 경험상 폴더를 지정하는 경우가 많았던것 같다. 경로를 확인해보자. 2017. 1. 23.
[python] yield 커맨드(iterable, generator) terable 순차적으로 접근이 가능한 리스트 등 Generator 메모리에 값을 저장하는 것이 아니라, for 문이 처리하는 시점에 값을 생성함. 한번 만 사용이 가능함 Yield 마치 return 문 처럼 동작함 호출되는 시점에 동작하는 것이 아니라, for 문이 처리하는 시점에 값을 생성함 http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do 2016. 12. 16.
[python][pip] pip 인스톨시에 프록시, 인증서 이용하기 pip를 이용하여 패키지 설치시에 프록시 서버는 다음과 같이 지정한다. pip install --proxy=http://IP:PORT xml 그리고 내부 프록시 접속을 위해 인증서를 이용해야 할 경우가 있다. 이럴때는 다음과 같이 cert 옵션을 이용한다. pip install xml --proxy IP:PORT --cert certifi.cer 2016. 12. 15.
[python] 처리 시간의 평균 구하기 datetime을 이용하여 처리시간의 평균을 구하는 방밥은 다음과 같다. 처리시간을 초로 변환하여 모두 더하여 나누고, 이것을 다시 시간으로 변환하면 된다. 문자열을 datetime 객체로 변화할 때는 striptime() 메소드를 이용하면 된다. 2016. 10. 4.
[python] HTTP request 를 이용하여 json 가져오기 python 에서 json을 가져오는 방법은 simplejson 모듈을 이용하면 된다. https://pypi.python.org/pypi/simplejson 2016. 10. 4.
[python] 파이썬은 정말로 느린가? 네 Python은 느립니다. 하지만 저는 신경쓰지 않습니다. 파이썬이 느린가에 대한 좋은 내용이 있어서 읽어보고 스크랩합니다. ^^ 요약하자면... 파이썬은 인터프리터 언어이기 때문에 C, C++ 보다 느릴수 밖에 없다. 하지만 파이썬의 강점은 생산성에 있다. Java, C++ 대비 2배 이상의 생산성을 가질 수 있다. 파이썬의 동작이 느려서 문제가 생긴다면, 병목현상이 발생하는 부분을 확인하여 코드를 최적화하고,그래도 안된다면 다른 아키텍처를 찾는다. 가장 비싼 자원을 최적화 하세요. 그것은 컴퓨터가 아닌 당신입니다. 2016. 6. 7.
[개념] 파이썬 종류, 장단점, 속도에 대한 변명 파이썬은 인터프리터를 구현한 종류에 따라 아래와 같이 구분될 수 있다. 보통 CPython을 Python 이라고 부른다. IronPython.Net 으로 구현CPythonJPythonPyPy [장점]읽고 사용하기가 쉽다. IOT 에 강점을 가진다. 비동기식 코딩자바보다 뛰어난 멀티패러다음 [단점]속도Java, C에 비하여 느리다. 속도 향상을 위한 방법으로 C Binding 방법이 존재한다. 자바의 JNI 처럼 원시 코드를 직접 호출하여 속도를 높인다. 모바일 컴퓨팅과 브라우저의 부재설계의 제약 JIT가 없는 동적 인터프리터 언어와, 컴파일언어의 성능을 비교하면 컴파일러가 압도적으로 유리하다. 파이썬의 강점은 속도에 있지 않다. 파이썬의 최대 강점은 생산성에 있다. http://www.itworld.co.. 2016. 5. 16.
[requests] requests 모듈을 이용한 http get, post 처리 python 에서 http 를 처리하는 방벙에는 기본적으로 제공하는 urllib, urllib2 모듈을 이용하는 방법도 있지만 request 모듈을 이용하면 좀더 편리하게 처리할 수 있다. pip install requests pip를 이용하여 설치후 사용한다. #! -*- coding:utf-8 -*- import requests r = requests.get('http://comic.naver.com/webtoon/detail.nhn?titleId=22027&no=1&weekday=wed') print(r.text) print(r.headers) print(r.encoding) print(r.cookies) print('-------------------') # header 를 이용 headers =.. 2016. 3. 28.
[os] 디렉토리의 특정파일의 파일명 변경하기 디렉토리에 지정된 특정 파일의 파일명을 일괄로 변경해야 하는 경우 다음의 소스를 활용하면 된다. 아래는 현재 디렉토리의 zip 파일을 가져와서 파일명의 공백과 꺽쇠를 없애는 소스코드이다. def rename_file(): for filename in os.listdir("."): if filename.endswith("zip"): os.rename(filename, filename.replace(" ", "_").replace("", "")) 2016. 3. 23.
[urllib / http]http로 웹에서 파일 다운로드 하기 웹상에서 파일을 다운로드 하기 위해서는 urllib 모듈을 이용하면 된다. 다음과 같이 2가지 방법이 있다. * urlretrieve 를 이용하는 것이 더 편할듯 import urllib urllib.urlretrieve(file_url, file_name) import urllib resource = urllib.urlopen("http://www.digimouth.com/news/media/2011/09/google-logo.jpg") output = open("file01.jpg","wb") output.write(resource.read()) output.close() http://stackoverflow.com/questions/8286352/how-to-save-an-image-locally-.. 2016. 3. 5.
[xml] xml 파싱하기 파이썬에서 xml 을 파싱할때는 xml.etree.ElementTree 를 이용하여 진행한다. 주오 프로퍼티는 tag, attrib, text 가 있고, 주요 메소드는 iter(), findall() 이 있다. 활용 방법은 다음과 같다. # -*- coding:utf-8 -*- import xml.etree.ElementTree as ET country_data_as_string = ''' 1 2008 141100 4 2011 59900 68 2011 13600 1 2015 4 2015 ''' tree = ET.parse('test.xml')#파일을 이용한 파싱 root = tree.getroot() root = ET.fromstring(country_data_as_string)# xml 문자를 이용한 .. 2016. 2. 16.
[python][xlswriter] xlsxwriter 를 이용하여 엑셀 문서 생성 파이썬에서 엑셀 문서를 생성하기 위해서는 xlsxwriter를 이용한다. * 수정은 안됨 바로가기 -> http://xlsxwriter.readthedocs.org/contents.htmlworkbook 옵션 -> http://xlsxwriter.readthedocs.org/workbook.html Workbook 생성시 사용할 수 있는 옵션 중 다음은 중요하다. constant_memory - xlsxwriter는 파일의 내용을 다음 프로세스에 자유롭게 사용하기 위해 메모리에 저장한다. - 파일 사이즈가 커지면 사용하는 메모리양도 점점 커지기 때문에 메모리 오류가 발생할 수 있다. - 이를 위해 파일 사이즈가 크다면 해당 옵션을 True 로 설정하여 메모리를 고정한다. tmpdir- xlsxwriter.. 2016. 1. 20.
SyntaxError: Non-ASCII character 해결하기 파이썬에서 아래의 에러가 발생하는 이유는 파이썬 2.x의 기본 인코딩이 한글을 지원하지 않기 때문이다. 따라서 스크립트에 한글이나 유니코드가 쓰여져 있이면 오류가 발생한다. SyntaxError: Non-ASCII character '\xeb' ... 이럴 때는 스크립트의 첫번째 or 두번째 라인에 아래와 같이 추가해주면 된다. 주의할 점은 coding 다음에 콜론(:)을 띄우면 안된다는 것이다. # -*- coding: utf-8 -*-# -*- coding : utf-8 -*- (안됨) https://www.python.org/dev/peps/pep-0263/ 2016. 1. 20.
pip의 패키지 업그레이드 하기 pip를 이용하여 모듈을 설치하고 업그레이드 하는 방법은 다음과 같다. 새로운 기능이 등장하여 모듈을 업그레이드 할 때는 --upgrade 옵션을 추가하면 된다. 설치 : pip install [패키지명]업그레이드 : pip install [패키지명] --upgrade 2016. 1. 20.
python2의 map, filter, reduce 함수 [python2의 map, filter, reduce 함수] map 함수를 이용하여 리스트의 값들에 동일한 로직을 적용하여 데이터를 변환하고, filter 함수를 이용하여 리스트의 값들을 필터링,reduce 함수를 이용하여 리스트의 값을 하나로 모은다. temp_list = range(0, 10) # python map, filter, reduce 함수 # map 함수는 iterable 에 동일한 함수를 적용한다. # map(function, iterable, ...) print map(lambda x: x + 1, temp_list) # filter 함수는 iterable 에서 조건에 맞는 함수를 제거한다. print filter(lambda x: x > 3, temp_list) # reduce 함수는.. 2015. 12. 28.
[Python] ==과 is 의 차이 == 는 값을 비교, is는 레퍼런스(참조) 비교 >>> 1000 == 10 ** 3 True >>> 1000 is 10 ** 3 False 2015. 8. 5.
[Python] http 리퀘스트 처리하기 HTTP 리퀘스트 처리하기 파이선에서 http 리퀘스트를 처리하는 방법에는 urllib, urllib2 모듈을 이용하는 방법이 있다. urllib 모듈은 http, ftp, file 등의 처리도 동시에 가능하다. urllib2 모듈은 리퀘스트 시점에 헤더 정보를 입력하는 것이 가능하다. requests 모듈은 파이선의 기본 모듈이 아니라 추가적으로 설치하여 사용하는 모듈이다. 예제 #!/usr/bin/python # -*- coding: utf-8 -*- import urllib import urllib2 import requests # urllib - Open arbitrary resources by URL # urllib2 - extensible library for opening URLs -> 파이.. 2015. 6. 23.
[python] time, datetime, timedelta time, datetime, timedelta datetime – basic date and time types time : time access and conversions 파이선에서 날짜 관련 객체는 datetime, time 가 있다. 둘다 날짜를 처리하는 객체이지만 사용 가능한 메소드들을 확인해 보면 time은 지역화 설정 등의 메소드들을 제공하고, datetime 객체는 날짜, 시간을 조작하는 기능을 제공한다. 그리고 날짜간의 연산을 위해 timedelta 객체를 제공한다. 현재부터 하루전, 한시간후 등의 시간을 구하거나, 시작시간과 종료시간 사이에 걸린 시간 등을 구하는데 사용한다. 예제코드 #!/usr/bin/python # -*- coding: utf-8 -*- import time fro.. 2015. 6. 19.