[파이썬, Python] String 검색

count(keyword, [start, [end]]) - keyword 포함 개수
endswith(postfix, [start, [end]]) - 문자열 끝에 postfix가 있는지 검사
find(keyword, [start, [end]]) - keyword가 있는 첫번째 인덱스, 없으면 -1
index(keyword, [start, [end]]) - keyword가 있는 첫번째 인덱스, 없으면 Error 발생


[출처] Python string|작성자 대한민군


>>> 'python'.count('p')

1

>>> 'python'.count('p',1)

0

>>> 'python'.find('p')

0

>>> 'python'.find('i')

-1

>>> 'python'.index('p')

0

>>> 'python'.index('i')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: substring not found

>>> 'python'.endswith('on')

True

>>> 'python'.endswith('hon')

True

>>> 'python'.endswith('onn')

False


반응형


changeExt.py

[파이썬, Python] 파일명 확장자 변경하기 예제 


"파일명 + 확장자"로 구성된 파일명을 읽어서, 다른 확장자로 바꾸는 예제입니다.


이 예제의 핵심은 os.path.splitext()를 사용하는 것이며,

확장자가 '.wav'이면, '.pcm'으로 바꾸고, 그 외의 경우에는 '.pcm'을 붙여주는 예제...


[changeExt.py]

#!/usr/bin/python

import sys

import os.path


if len(sys.argv) is 1:

filename = raw_input('Please type input file name: ') # There is no option.

else:

filename = sys.argv[1]


fn_ext = os.path.splitext(filename)


print 'Input file name: %s' % fn_ext[0]

print 'Input file ext: %s' % fn_ext[1]


if fn_ext[1] == '.wav':

out_filename = fn_ext[0] + '.pcm'

else:

out_filename = fn_ext[0] + fn_ext[1] + '.pcm'


print 'Out file name: %s' % out_filename


실행 결과는 다음과 같이...

1. 확장자가 "wav"인 경우:

D:\mytool>python changeExt.py test.wav

Input file name: test

Input file ext: .wav

Out file name: test.pcm


2. 확장자가 "wav"가 아닌 경우:

D:\mytool>python changeExt.py test.pcm

Input file name: test

Input file ext: .pcm

Out file name: test.pcm.pcm


3. 파일 이름이 ".wav"인 경우:

D:\\mytool>python changeExt.py .wav

Input file name: .wav

Input file ext:

Out file name: .wav.pcm


[참고]

os.path.split() : 폴더명과 파일명을 구분할 때

os.path.splitdrive() : 드라이브명을 구분할 때

반응형

[파이썬, Python] if x is not None or if not x is None?


질문: 파이썬에서 `if x is not None`와 `if not x is None` 중에서 어떤 표현이 맞을까요?

정답: 둘은 같다. 하지만, `if x is not None`를 사용하는 것이 좋겠다.


다음의 예제를 보자.


>>> x=2

>>> x

2

>>> bool(x)

True

>>> not x

False

>>> x is not None

True

>>> not x is None

True

>>> not (x is None)

True

>>> (not x) is None

False


즉, 아래의 3가지 예제는 모두 동일한 표현입니다.

if x is not None

if not x is None

if x


소스를 읽는 사람의 입장에서 볼 때, `if not x is None`는 혼란을 줄 수 있는 방식이기 때문에...


시험 문제를 출제하는 것이 아니라면, 보는 사람이 읽기 쉬운 것이 더 좋겠죠 ^^

그리고, `if x is not None` 가 `if x`보다는 처리 속도가 약간 빠르다고 합니다.


결론적으로는, 어떤 것을 사용해도 무방하지만,

가급적 `if x is not None`를 사용하는 것이 좋겠습니다.




반응형

[파이썬, Python] binary file 열어 byte arrary로 읽기


바이너리 파일 읽기 전용 모드로 열어서, byte array로 파일 전체를 읽어 오는 예제는 다음과 같습니다.


예제)

file = open(filename, 'rb')

byteBuffer = bytearray(file.read())



=======================


파일 처리 모드
  - 'r' : 읽기 전용
  - 'w' : 쓰기 전용
  - 'a' : 파일 끝에 추가(쓰기 전용)
  - 'r+' : 읽고 쓰기
  - 'w+' : 읽고 쓰기(기존 파일 삭제)
  - 'a+' : 파일 끝에 추가(읽기도 가능)
  - 'rb' : 바이너리 파일 읽기 전용
  - 'wb' : 바이너리 파일 쓰기 전용
  - 'ab' : 바이너리 파일 끝에 추가(쓰기 전용)
  - 'rb+' : 바이너리 파일 읽고 쓰기
  - 'wb+' : 바이너리 파일 읽고 쓰기(기존 파일 삭제)
  - 'ab+' : 바이너리 파일 끝에 추가(읽기도 가능)

반응형

[파이썬, Python] 한글 지원


한글이 포함되어 있으면 아래와 같은 Error가 발생함.

File "test.py", line 21

SyntaxError: Non-ASCII character '\xed' in file test.py on line 3, but no enc

oding declared; see http://www.python.org/peps/pep-0263.html for details


이 문제점을 해결하기 위해서는, 아래 붉은 색 부분을 추가하면 됩니다.

#!/usr/bin/python

# -*- coding: utf-8 -*-

print(u'안녕~~~'.encode('cp949'))



반응형


[파이썬, Python] sys.argv 명령행 옵션 구하기 - 파일명 입력 받기 예제


sys.argv[0] 에는 python 스크립트 자기 자신의 파일명 풀패스가 들어감.
sys.argv[1] 에는 첫번째 옵션이 들어가고,
sys.argv[2] 에는 두번째 옵션이 들어감.


예제 1)

[test.py]

#!/usr/bin/python

import sys

optionLen = len(sys.argv)

if optionLen is 1:

print 'There is no option.'

else:

print 'Number of option is %d.' % (optionLen-1)

for i in range(optionLen):

print 'sys.argv[%d] = %s' % (i, sys.argv[i]) 


[결과 1]

C:\>python test.py option1 option2 option3

Number of option is 3.

sys.argv[0] = test.py

sys.argv[1] = option1

sys.argv[2] = option2

sys.argv[3] = option3



예제 2) 파일명 입력 받기

#!/usr/bin/python

import sys

if len(sys.argv) is 1:

filename = raw_input('please type file name: ') # There is no option.

else:

filename = sys.argv[1]

while True:

try:

print 'The File is : %s' % filename

file = open(filename, 'rb')

break

except:

print '[Error] No such file: %s' % filename

filename = raw_input('please try again!!! type file name: ')



아래 결과 2-1는, python test.py와 같이 실행을 할 경우이며,

len(sys.argv)의 값이 1이 되기 때문에, raw_input이 실행되어, 

파일명 입력을 유도하는 "please type file name:"이 화면에 표시되고, 

"test.py"를 입력하면, "The File is : test.py"라 출력됩니다. 



[결과 2-1]

C:\>python test.py

please type file name: test.py

The File is : test.py



아래 결과 2-2에서, python test.py test.py와 같이 실행을 할 경우에는,  

len(sys.argv)의 값이 2가 되고, sys.argv[1]에는 "test.py"가 저장되며, 

"The File is : test.py"가 바로 출력됩니다.



[결과 2-2]

C:\>python test.py test.py

The File is : test.py



결과 2-3에서, python test.py test1.py와 같이 실행을 할 경우에는,

len(sys.argv)의 값이 2가 sys.argv[1]에는 "test1.py"가 저장되며, 

테스트한 폴더에 test1.py라는 파일이 없기 때문에,

"[Error] No such file: test1.py"라고 출력되어 지고, 

파일명을 다시 입력하도록 유도하는 "please try again!!! type file name:"가 출력됩니다.



[결과 2-3]

C:\>python test.py test1.py

The File is : test1.py

[Error] No such file: test1.py

please try again!!! type file name:


반응형

[파이썬, python] if not x

출처: http://lilypad.egloos.com/669276


if not x 의 조건에 들어맞는 x는 다음과 같다.
1) False
2) 0
3) 빈 리스트 [] 
4) 빈 튜플 ()
5) 빈 딕셔너리 {}
6) 문자길이 0의 문자열 ""
7) None
8) 등등

팁) if 로 None 여부를 알고 싶을 때는 if x==None으로 하지 말고, if x is None 으로 하기.
=> 의미는 같지만, if x is None가 내부적으로 약간 빠르다고 합니다.

파이썬에서 None이라는 특별한 객체가 있는데, 이 객체는 "아무것도 없다", "아무것도 아니다"를 나타내기 위해서 사용되는 파이썬 내장 객체이며 진리 값은 언제나 거짓이

===========================


>>> bool(0) # 정수 0은 거짓

False

>>> bool(1)

True

>>> bool(0.0) # 실수 0.0은 거짓

False

>>> bool('abc')

True

>>> bool('') # 빈 문자열은 거짓

False

>>> bool([]) # 빈 리스트는 거짓

False

>>> bool(()) # 빈 튜플은 거짓

False

>>> bool({}) # 빈 사전은 거짓

False

>>> bool(None) # None 객체는 거짓

Fasle


따라서, 다음 값은 모두 거짓으로 간주됨.

  • None
  • 0, 0.0, 0L, 0.0+0.0j
  • '', [], (), {}


반응형

+ Recent posts