프로그래밍을 빠르게 습득하는 방법 중 하나가 원래 있던 함수들을 본인 나름대로 재해석해서 코딩해 보는 것이라 생각한다.

그것이 효율적이지 못 한 코딩일지라도...


내장 함수인 sort를 이용한 방법.


내가 직접 내장함수인 sort 기능과 동일하게 만들어 본 함수

(len(s)/2)+1 대신에 (len(s) >> 1)+1 로 해도 된다. 그리고 이것이 훨씬 더 빠르다.




대소문자 상관없이 정렬해주게 끔 하는 sort를 한번 해보았다. 단지, upper 함수만 추가해 주었다.


'Programming > Python' 카테고리의 다른 글

튜플 (Tuple)  (0) 2013.02.21
파일이름과 경로명 분리  (0) 2013.02.18
디렉토리의 파일목록, 정보 알아내기  (0) 2013.02.13
파이썬에서 배열 표현  (1) 2013.02.13
명령행 옵션 처리  (0) 2013.02.13
Posted by scii
:

목록 얻기

파이썬을 수행하면서, 디스크에 있는 파일의 목록을 얻고 싶을 때가 있다. 디렉토리의 파일 목록을 얻으려면 glob 모듈의 glob 함수를 사용한다. 결과로 파일명의 리스트를 넘겨준다. 와일드 카드 문자 (?, *) 를 지원한다.

? 는 임의의 문자 1개와 매칭

* 는 임의 개수(0개 포함)의 모든 문자와 매칭

[...] 는 괄호 안의 임의의 1개 문자와 매칭





파일의 추가 정보 알아내기

어떤 파일의 종류를 알아내려면 os.path 모듈의 함수들을 이용할 수 있다.

isfile(path)                          path가 일반 파일이면 True 리턴

isdir(path)                           path가 디렉토리면 True 리턴

islink(path)                          path가 심볼릭 링크이면 True 리턴

ismount(path)                    path가 마운트 포인트이면 True 리턴 (Unix)

exists(path)                         path가 존재하면 True 리턴


getsize 함수는 byte 단위로 리턴한다. 그래서 /1024 를 하면 kb가 되고, /1024**2 를 하면 mb가 된다.


'Programming > Python' 카테고리의 다른 글

파일이름과 경로명 분리  (0) 2013.02.18
sort 함수 만들기  (0) 2013.02.14
파이썬에서 배열 표현  (1) 2013.02.13
명령행 옵션 처리  (0) 2013.02.13
특정 문자열 없애기  (0) 2013.02.13
Posted by scii
:

이 포스팅은 Python 2.7.3 의 환경에서 진행되었다.


01. 한글 설정이 필요한 이유?

Python의 기본 인코딩 형식은 'ASCII' 형식이다. 

그래서 다른 프로그램과의 호환을 위해서 인코딩을 'UTF-8' 로 변경해야한다. 

※  EUC-KR 은 유닉스의 한글 완성형이고, CP949는 EUC-KR 을 확장하여 더 많은 글자를 포함한 윈도우 계열의 형식이다. 따라서 완성형 한글을 쓰는 경우에는 호환성을 위해 CP-949를 사용한다. 

하지만 국제화 규격을 생각하여 이들보다는 UTF-8 을 쓰는 것이 좋다.

변경이유는, 문자를 변환하는 형식이 달라 한글 인식을 못하거나 깨짐 현상이 발생할 수 있기 때문이다. UTF-8은 유니코드이기 대문에 대부분의 프로그램에서 동일한 byte로 문자를 인식한다. 그래서 문제를 줄일 수 있다.


02. Python에게 한글 인식 적용시키기. (윈도우도 동일하다. 단지, 경로만 틀릴 뿐이다.(window의 경우 c:\Python27\Lib)

파이썬 idle을 열고 open을 한다


03. /usr/lib/python2.7로 간다. 리눅스에서는 여기가 자신의 파이썬 경로이다. 그 후, site.py 파일을 찾아 열기를 한다.


04. Edit - Find를 눌러서 setencoding 함수 부분으로 이동한다.


05. encoding = "ascii"  #  Default value set by _PyUnicode_Init() 부분을 찾는다. 여기를 "ascii"  ->  "utf-8" 로 변경한다.

그 후, 저장을 한다. 

하지만 리눅스에서는 퍼미션 에러가 발생할 것이다. 왜냐하면 자신의 홈디렉토리의 파일이 아니라 관리자의 파일이기 때문이다. 

그래서 Linux 환경에서는 idle에서 하면 안된다. (window 사용자는 잘 됨.)


06. 저장에 실패하였기 때문에, 다른 방법을 찾아야 한다.

터미널을 열어서 site.py 파일이 있는 곳으로 이동한다. cd /urs/lib/python2.7/

그 후, 관리자의 권한으로 열어야하므로 sudo vi site.py 로 파일을 연다.


07. /setencoding 으로 해당 함수가 있는 곳으로 이동한다.


08. encoding = "ascii"가 보인다. "utf-8"로 변경한다. 그 후 wq로 저장하고 빠져나온다.



윈도우 사용자는 encoding 부분을 cp949로 해줘야 한다. utf-8로 하면 에러발생.



09. 마지막으로 출력 방식을 한 번 더 셋팅해줘야 한다.

해당 디렉토리의 idlelib 디렉토리로 이동한다. cd idlelib

이동해서 목록을 살펴보면 PyShell.py 파일이 보일것이다. 이 파일을 연다.


10. /def readline 으로 해당 함수를 찾아서 이동한다.


11. 해당 함수의 맨 밑의 return line 을 찾아서 str(line) 으로 바꾸어준다.


12. python에서 한글이 잘 표현되는 것을 볼 수 있다.


이렇게 미리 Python의 인코딩을 설정해주면, 앞으로 다른 프로그램과의 호환 문제에 있어서 인식을 못하는 경우를 방지할 수 있다. 

문제가 발생해서 해결법을 찾는 것보다...미리 방지하는 것이 좋을 것 같다!!


'Programming > etc' 카테고리의 다른 글

Python PySide 설치  (1) 2013.03.07
윈도우환경을 리눅스환경처럼  (0) 2013.02.19
[Python] IDLE Color Theme  (0) 2013.02.01
Visual Studio 디버깅하는 방법  (0) 2013.01.03
Eclipse 단축키  (0) 2012.12.26
Posted by scii
:

1차원 배열 표현


2차원 배열 표현

위의 사진에서 mat = [[0]*4]*3 은 올바른 행렬이 생성된 것처럼 보이지만 세 개의 행은 하나의 리스트 객체이다. 


'Programming > Python' 카테고리의 다른 글

sort 함수 만들기  (0) 2013.02.14
디렉토리의 파일목록, 정보 알아내기  (0) 2013.02.13
명령행 옵션 처리  (0) 2013.02.13
특정 문자열 없애기  (0) 2013.02.13
리스트 내장  (0) 2013.02.13
Posted by scii
:

getopt 모듈의 getopt 함수를 이용하면, sys.argv로 전달받은 명령행의 인수 리스트에서 옵션을 분리해 낸다. 옵션 인수는 -로 시작한다.


getopt 함수는 두 개의 인수를 받는데, 

첫 번째는 인수 리스트(sys.argv[1:]) 이고,

두 번째는 옵션 문자들이다. 옵션 문자에 : 가 사용된다면 옵션에 추가의 인수를 받아들인다는 의미이다.


즉, 'abc:d:' 에서 a, b는 단독 옵션이고 c, d는 인수를 갖는 옵션이다. 


getopt의 다른 예)



getopt의 다른 예제

옵션 x는 check를 0으로 만들고, v는 verbose 값을 1 증가시킨다. m 옵션은 추가의 인수로 maxpage 변수 값을 설정한다.



getopt 함수의 롱 옵션처리

롱 옵션은 getopt.getopt의 세 번째 인수로 지정된다. 세 번째 인수는 리스트이며 옵션의 인수를 필요로 한다면, condition= 와 같이 옵션 이름 뒤에 = 를 추가한다.

아래의 예에서 args는 명령행 인수를 인공적으로 만든 리스트이다. 실제로는 args = sys.argv[1:]  와 같이 할 수 있다.


'Programming > Python' 카테고리의 다른 글

디렉토리의 파일목록, 정보 알아내기  (0) 2013.02.13
파이썬에서 배열 표현  (1) 2013.02.13
특정 문자열 없애기  (0) 2013.02.13
리스트 내장  (0) 2013.02.13
Python의 리스트 자료형으로 Stack, Queue 쓰기  (0) 2013.02.12
Posted by scii
:

열혈강의 파이썬 문제중...

텍스트에서 모든 태그를 제외한 정보를 출력하라. 태그란 < > 로 표현된 문자열을 의미한다.

이 문제가 있었는데... 해답이 없다. 인터넷을 돌아다니며 알아본 결과, 이것은 정규식을 가지고 해결하도록 유도하는 문제였다.. 아마.. 근데.. 정규식으로

이 문제의 대한 답인 정규식으로 url같은 긴 텍스트를 하니 잘 되지 않았다. 아마도 정규식에서 뭔가 빠진듯..


정규식을 안쓰고 했던 것.. 이것들은 안빠지고 잘 됨!

이 알고리즘보다는... 밑에 것이 낫다!! 이것은 반복문이 2개나 있기때문이다.


반복문 하나와 제어문으로 구성되어있다.



※ 정규식으로... 해 보았는데... 길고 복잡한 텍스트에서는 작동이 잘 안되었다. 정규식에 뭔가 빠진듯 하다.

import re

re.sub('<(.*?)>', '', ss)

이렇게 하였는데 url을 가져와서 해보니 잘 되질 않는다. 몇몇개가 빠진다. 



'Programming > Python' 카테고리의 다른 글

파이썬에서 배열 표현  (1) 2013.02.13
명령행 옵션 처리  (0) 2013.02.13
리스트 내장  (0) 2013.02.13
Python의 리스트 자료형으로 Stack, Queue 쓰기  (0) 2013.02.12
리스트  (0) 2013.02.12
Posted by scii
:

리스트 내장

Programming/Python 2013. 2. 13. 00:33 |

리스트 내장(List Comprehension) 을 이용하여 0부터 9까지의 제곱의 리스트 만들기

L = [k * k for in k range(10)]

파이썬은 리스트를 대단히 유용하게 활용하는데 리스트 내장은 리스트를 쉽게 만드는 데 유용하다.

이것은 다음과 같이 표현된 것이다.

L = []

for k in range(10):

L.append(K * k)


리스트 내장은 함수적 프로그래밍 언어 Haskell에서 따온 것이다.

[ expression for expr in sequence1

for expr in sequence2 ...

for expr in sequenceN

if condition ]

for ... in 절은 시퀀스를 반복한다. for 문으로 취해지는 각각의 값들은 expression에서 사용된다. 

마지막 if 절은 선택적이다. 존재한다면, expression은 condition이 참일 때만 값이 계산되고 결과에 추가된다.


리스트 내포는 다음의 파이썬 코드와 동등하다.

for expr1 in sequence1:

for expr2 in sequence2:

...

for exprN in sequenceN:

if (condition):

# 식의 값을 결과 리스트에 추가




두 시퀀스 자료형의 모든 자료의 조합 만들기


※ 리스트 내장 효과의 발생자

메모리를 점유하는 리스트를 생성하지 않으면서 리스트 내장 효과를 내는 것이 가능하다.

예를 들면 다음과 같은 코드가 가능하다

이 코드가 리스트 내장과 다른 점은 (x*x for x in range(10))가 발생자를 만든다는 점이다.

이 반복자는 새로운 리스트를 생성하지 않으면서 합 계산에 사용될 수 있다.

리스트 내장보다 효과적인 이유는 중간의 리스트를 생성해 내지 않는 데 있다.


즉, 리스트 내장의 경우 다음과 같이 코딩한다.

sum([x*x for x in range(10)])

생성된 리스트에 대한 sum을 계산한다.


'Programming > Python' 카테고리의 다른 글

명령행 옵션 처리  (0) 2013.02.13
특정 문자열 없애기  (0) 2013.02.13
Python의 리스트 자료형으로 Stack, Queue 쓰기  (0) 2013.02.12
리스트  (0) 2013.02.12
문장에서 각 단어의 횟수 세기  (0) 2013.02.12
Posted by scii
:

리스트를 스택으로 쓰기

스택이란 나중에 넣은 데이터를 먼저 꺼내도록 되어 있는 메모리 구조를 말한다. 

넣는 연산을 'push', 꺼내는 연산을 'pop' 이라고 한다.


리스트는 그 자체를 스택으로 쓸 수 있게 설계되었다. 스택의 push는 append 메쏘드를, pop은 pop 메쏘드를 사용한다.





리스트를 큐로 쓰기

큐란 먼저 넣은 데이터를 먼저 꺼내도록 되어 있는 메모리 구조를 말한다.

데이터를 넣을 때는 append를, 꺼낼 때는 pop(0)을 이용한다.




'Programming > Python' 카테고리의 다른 글

특정 문자열 없애기  (0) 2013.02.13
리스트 내장  (0) 2013.02.13
리스트  (0) 2013.02.12
문장에서 각 단어의 횟수 세기  (0) 2013.02.12
문자열 분리  (0) 2013.02.12
Posted by scii
: