티스토리 뷰

Encoding&Decoding

인코딩과 디코딩은 그냥 사람의 언어와 컴퓨터 언어를 번역해준다고 생각하자. 

번역 방식은 유니코드!

그래서 다음 그림은 인코딩 과정을 보여주는 그림인데 디코딩은 이와 반대라고 생각하면 될 것 같다.

 

Encoding process



문자열과 밀당하기

s = 'I don't like Python!'

처음 공부할 때 요따구로 쓰고 싶은데 어쩌지라는 생각을 많이 했었다. 이럴 때 쓰는 것이 '이스케이프 문자'.

문자가 파이썬이라는 감옥에서 탈출하려는 느낌인 것 같다. (나도 같이 나가고 싶다.)

 

 

\' , \", \n 이런 식으로 적으면

\ 코리안원~ 뒤에 적은 문자가 그대로 출력된다.

 

 

그런데 이스케이프 문자로 탈주한 놈을 다시 파이썬 감옥에 넣으려면?!

'원시 문자열'이라는 것을 쓰면 된다. 중요한지는 모르겠으나 그래도 방법은 다음과 같다.

 

print('Please don\'t touch it')
print(r'Please don\'t touch it')

그럼 이렇게 출력된다.

Please don't touch it
Please don\'t touch it

지금부턴 유용해 보이는 것들을 살펴보자.

startswith, endswith

EmployeeID = ['OB94382', 'OW34723', 'OB32308', 'OB83461', 
                                  'OB74830', 'OW37402', 'OW11235', 'OB82345'] 
Production_Employee = [P for P in EmployeeID if P.startswith('OB')]   # 'OB'로 시작하는 직원 ID를 다 찾아봅니다
Production_Employee
['OB94382', 'OB32308', 'OB83461', 'OB74830', 'OB82345']
import os
image_dir_path = os.getenv("HOME") + "/data/pictures"   
# 각자의 사진이 보관된 디렉토리를 골라 주세요. 
photo = os.listdir(image_dir_path )
png = [png for png in photo if png.endswith('.png')]
print(png)
['image5.png', 'image2.png', 'image12.png', 'image3.png', 'image8.png', 'image13.png', 'image6.png', 'image4.png', 'image14.png', 'image9.png', 'image10.png', 'image7.png', 'image11.png', 'image1.png']

말 그대로 무엇으로 시작하는, 무엇으로 끝나는 을 찾아주는 역할을 한다. 어떤 일련 번호로 된 정보에서 특정한 정보를 뽑아내거나 특정 확장자를 가진 파일들을 걸러내는 역할로 활용하기 좋아보인다.

 

trimming

일상에서 우리가 띄어쓰기를 사용하듯 공백 문자는 필수적으로 생기는데, 이 공백문자를 제거하고 다듬는 방법이 있다.

strip() 메서드를 사용하면 된다!

txt = "      Strip white spaces.      "
print('[{}]'.format(txt))
print('--------------------------')

#- 양쪽 공백 제거 : strip()
print('[{}]'.format(txt.strip()))
print('--------------------------')

#- 왼쪽 공백 제거 : lstrip()
print('[{}]'.format(txt.lstrip()))
print('--------------------------')

#- 오른쪽 공백 제거 : rstrip()
print('[{}]'.format(txt.rstrip()))
[      Strip white spaces.      ]
--------------------------
[Strip white spaces.]
--------------------------
[Strip white spaces.      ]
--------------------------
[      Strip white spaces.]

앞에 붙은 l r 은 왼쪽 오른쪽이니 상황에 맞게 쓰자.


대소문자

  • upper() : 모든 문자를 대문자로 변환합니다.
  • lower() : 모든 문자를 소문자로 변환합니다.
  • capitalize() : 첫 글자만 대문자로 변환합니다.

하나만 예로 살펴보자.

txt = 'david, i love you'
txt.capitalize()

결과는 'David, i love you' 로 나오게 될 것이다.

 

isX() 메서드

: 문자열 구성에 따라 불린(boolean)의 값을 반환(return)해주는 메서드다.

  • isupper() : 문자열이 모두 대문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
  • islower() : 문자열이 모두 소문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
  • istitle(): 문자열의 첫 글자만 대문자로 되어 있으면 True, 그렇지 않으면 False를 반환
  • isalpha(): 문자열이 모두 알파벳 문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
  • isalnum(): 문자열이 모두 알파벳 문자와 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환
  • isdecimal(): 문자열이 모두 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환
print("aiffel".isupper())
print("aiffel".islower())
print("PYTHON".istitle())
print("python101".isalpha())
print("python101".isalnum())
print("101".isdecimal())
False
True
False
False
True
True

join() / split() / replace()

join()은 인자로 tuple, list, string 등 반복 가능한(iterable) 객체를 받는 메서드.

#- join()
stages = ['fundamentals', 'exploration', 'goingdeeper']
",".join(stages)
'fundamentals,exploration,goingdeeper'

리스트를 문자열로 변환해주기 위해 쓴다. 그리고! ",".join()의 " " 큰 따옴표 사이에 들어가는 것을 구분자라고 하는데, 구분자가 elements들 사이에 들어가고 하나의 문자열로 출력된다. 즉, "".join()으로 썼다면 "fundamentalsexplorat ···"로 출력되었을 것이다.

#- split()
'fundamentals,exploration,goingdeeper'.split(',')
['fundamentals', 'exploration', 'goingdeeper']

split()은 문자열을 리스트로 변환해주는데 join처럼 구분자를 소괄호 안에 넣어주면 그 구분자를 기준으로 요소들을 구분해서 리스트로 만든다. 마지막으로 replace(s1, s2)는 s1을 s2로 바꿔주는 기능이 있다.

sent = 'I can do it!'
sent.replace('I', 'You')
'You can do it!'


불변(immutable)의 문자열

  • 가변 객체(mutable object)
    • 객체를 생성한 후 객체의 값을 수정할 수 있습니다.
    • 변수는 값이 수정된 같은 객체를 가리키게 됩니다.
    • e.g. list, set, dict
  • 불변 객체(immutable object)
    • 객체를 생성한 후 객체의 값을 수정할 수 없습니다.
    • 변수는 해당 값을 가진 다른 객체를 가리키게 됩니다.
    • e.g. int, float, complex, bool, string, tuple, frozen set

python에서 변수는 자신에게 대입된 객체를 가리키는 일종의 포인터다.

string타입의 경우 immutable한 객체, 값 수정이 불가하기 때문에 아래 예시를 보면 달라진 객체를 따라 변수도 달라진 객체를 가리키게 된다.

 

sent = 'I fell into AIFFEL'
print(sent)
print(id(sent))
sent = sent.upper()
print(sent)
print(id(sent))
I fell into AIFFEL
139861182862800
I FELL INTO AIFFEL
139861182861520

 

자세한 부분들은 맨 아래 블로그에 너무나도 설명이 잘되어 있으니 참고하면 좋을 듯~ 

 

후 이제 마지막! 


정규표현식

정규식은 녀석은 내 친구는 아니고... 어떤 규칙을 이용해서 검색이나 잘못된 양식을 선별할 때 사용하는 고마운 녀석임. 이 또한 예제를 보면서 느껴야 좋을 듯.(파이썬은 싹다 예제로 공부해서 이해하는게 국룰.)

 

정규식 참고사항

e메일을 정규표현식으로 입력 받고 검사해보자!

import re

email = re.compile("([A-Za-z]+[A-Za-z0-9]+@[A-Za-z]+\.[A-Za-z]+)")
#email_regax = re.compile("(\.)"
email_input = input("이메일을 입력하세요. (ex: abc0123@gmail.com): ")
email_valid = email.search(email_input.replace(" ",""))

if email_validation:
	print("It's valid.")
else:
	print("It's invalid.")

[ ] 이안에 있는 것들(A-Z, a-z, 등...)은 뭐가 들어가든 괜찮으니 입력해봐라 라는 뜻이다. 결국 저기에 포함되는 것들을 입력하기만 하면 정상적인 이메일로서 등록이 가능하다.

또는 문자열에서 특정 패턴에 대해서 지속적으로 검색하거나 replace 같은 것들을 하기 위해 사용하기도 한다.

#1단계 :  "the"라는 패턴을 컴파일한 후 패턴 객체를 리턴합니다. 
pattern = re.compile("the")    

# 2단계 : 컴파일된 패턴 객체를 활용하여 다른 텍스트에서 검색을 수행합니다.
pattern.findall('of the people, for the people, by the people')
['the', 'the', 'the']

요로케! 그럼 이까지만 합시다! 

 



References and Citations

 

Python 개념 정리 - 객체란 ( mutable vs immutable )

본 포스팅에서는 파이썬의 mutable 객체와 immutable 객체에 대해  is 연산자, id 함수, == 연산자를 중심으로 설명하고 있습니다. 2018. 5. 10 - 최초작성 2018. 7. 19 파이썬에서 모든 것은 객체(object)입니다

webnautes.tistory.com

 

 

[Python 변수] mutable과 immutable의 차이

[Python 변수] mutable과 immutable의 차이 변수 변수는 객체를 가리킨다. $$ num = 10 $$ 컴퓨터 메모리에 10이라는 값이 저장되고 num은 10이 저장된 메모리의 위치를 가리킨다. 10이라는 정수형 객체를 num이

ledgku.tistory.com

 

 

'Python' 카테고리의 다른 글

Python 잘 하고 싶다.(for,generator,try-except 등)  (0) 2021.12.30
Python 기초 정리(제어문&자료형)  (0) 2021.12.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함