FUNDAMENTAL | 05-1. 텍스트 데이터 (문자열)

yeonk·2021년 9월 13일
0

aiffel-ai-bootcamp

목록 보기
10/38
post-thumbnail

20210913



1. 텍스트 데이터

인코딩 & 디코딩

인코딩 (encoding): 문자열을 바이트로 변환하는 과정. 이진수 변환
디코딩 (decoding) : 바이트를 문자열로 변환하는 과정



바이트(byte): 컴퓨터의 기본 저장단위. 8비트와 같음

ISO(International Standards Organization): 전세계 문자를 모두 표시할 수 있는 표준코드

UTF-8, UTF-16: 유니코드로 정의된 텍스트를 메모리에 인코딩하는 방식

ord(): 해당 문자에 대응하는 유니코드 숫자를 반환

chr(): 해당 유니코드 숫자에 대응하는 문자를 반환






파이썬과 유니코드

파이썬에서 모든 문자열은 유니코드로 표현

  • 외부 데이터 및 데이터베이스로부터 데이터를 읽거나 보낼 때는 인코딩 혹은 디코딩 작업을 거쳐야 함

  • 인코딩 규약은 내부적으로 유니코드(UTF-8)임을 의미






  • 파이썬2: 인코딩을 한 후에도 아스키(ascii) → 유니코드(unicode) 변환 등의 작업을 거침

  • 파이썬3: 문자열이 유니코드로 인코딩되므로 해당 텍스트가 인코딩이 되어 있는지, 혹은 디코딩이 되어 있는지만 고려






2. 문자열

원시 문자열(raw string)

이스케이프 문자 적용을 원하지 않을 때.
문자열을 시작하는 따옴표 앞에 r을 붙임

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






startswith, endswith

문자열의 시작 또는 끝의 조건을 판단하는 메서드.
주어진 문자열의 시작이나 끝을 판단하여 조건을 만족하면 True, 만족하지 않으면 False 반환

# startswith 사용


EmployeeID = ['OB94382', 'OW34723', 'OB32308', 'OB83461', 
                                  'OB74830', 'OW37402', 'OW11235', 'OB82345'] 
                                  
Production_Employee = [P for P in EmployeeID if P.startswith('OB')]   # 'OB'로 시작하는 직원 ID를 모두 찾기

Production_Employee



# endswith 사용

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)






trimming

공백문자 처리

  • 공백문자

스페이스(space) : 한 칸 띄어쓰기

탭(tab) \t : 네 칸 띄어쓰기. 경우에 따라 두 칸 띄어쓰기로 표기

줄 바꿈(new line) : 줄 바꿈

라인 피드 (line feed) \n : 줄 바꿈을 엄밀히 말하면 라인 피드라고 함

개행 복귀 (carriage return) \r : 커서를 맨 앞으로 이동시키는 것.
커서를 맨 앞으로 보내고, 그 뒤에 문자가 있으면 그 문자를 입력.



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()))






대소문자 변환

upper(): 모든 문자를 대문자로 변환

lower(): 모든 문자를 소문자로 변환

capitalize(): 첫 글자만 대문자로 변환






isX

문자열의 구성에 따라 불린(boolean)의 값을 반환(return)

isupper(): 문자열이 모두 대문자로만 되어 있으면 True, 그렇지 않으면 False를 반환

islower(): 문자열이 모두 소문자로만 되어 있으면 True, 그렇지 않으면 False를 반환

istitle(): 문자열의 첫 글자만 대문자로 되어 있으면 True, 그렇지 않으면 False를 반환

isalpha(): 문자열이 모두 알파벳 문자로만 되어 있으면 True, 그렇지 않으면 False를 반환

isalnum(): 문자열이 모두 알파벳 문자와 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환

isdecimal(): 문자열이 모두 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환






join()과 split()

join(): 인자로 tuple, list, string 등 반복 가능한(iterable) 객체를 받는 메소드
split(): 하나의 문자열을 구분자를 기준으로 나누어 줌.
명시적으로 구분자를 지정하지 않으면 쉼표 (,)를 기준으로 함

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

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






replace()

replace(s1, s2) 형태로 문자열 내 문자열 s1을 s2로 바꿈






mutable & immutable

mutable: 값이 변한다
immutable: 값이 변하지 않는다

  • 가변객체(mutable object)
    • 객체를 생성한 후 객체의 값을 수정할 수 있음
    • 변수는 값이 수정된 같은 객체를 가리킴
    • e.g. list, set, dict
    • cf. Call by reference



  • 불변객체(immutable object)
    • 객체를 생성한 후 객체의 값을 수정할 수 없음
    • 변수는 해당 값을 가진 다른 객체를 가리킴
    • e.g. int, float, complex, bool, string, tuple, frozen set
    • cf. Call by value






3. 정규 표현식(regular expression, regex)

정규 표현식은 우리가 찾고자 하는 문자열 패턴을 정의하고 기존 문자열과 일치하는지를 비교하는 것.

대부분의 운영 체제, 다양한 프로그래밍 언어, 그리고 텍스트 편집기와 같은 프로그램들이 지원

정규 표현식 사용법

1단계: 찾고자 하는 문자열의 패턴을 정의 → 컴파일(compile)
2단계: 정의된 패턴과 매칭되는 경우를 찾아 처리 하기

#  표준 라이브러리 re import
import re

# 컴파일 과정 없이 한 줄로 처리하기
re.findall('the', 'of the people, for the people, by the people')






메소드

search(): 일치하는 패턴 찾기 (일치 패턴이 있으면 MatchObject를 반환)

match(): search()와 비슷하지만, 패턴이 검색대상에 처음부터 일치해야 함
(MatchObject 반환)

findall(): 일치하는 모든 패턴 찾기 (모든 일치 패턴을 리스트에 담아서 반환)

split(): 패턴으로 나누기

sub(): 일치하는 패턴으로 대체하기

group(): 실제 결과에 해당하는 문자열을 반환






패턴 : 특수문자, 메타문자

정규 표현식을 강력하게 해주는 도구

[ ]: 문자

-: 범위

.: 하나의 문자

?: 0회 또는 1회 반복

*: 0회 이상 반복

+: 1회 이상 반복

{m, n}: m ~ n

\d: 숫자

\D: 비숫자

\w: 알파벳 문자

\W: 비알파벳 문자

\s: 공백 문자

\S: 비공백 문자

\b: 단어 경계

\B: 비 단어 경계






구현 순서

import re 를 통해 정규식 모듈을 가져오기.

re.compile() 함수로 Regex 객체를 만들기.

검색할 문자열을 Regex 객체의 search() , findall() 메소드로 전달.

0개의 댓글