[LMS] 7. 텍스트의 다양한 변신

송아람·2022년 1월 9일
0

LMS

목록 보기
2/3

1. 인코딩과 디코딩

  • 바이트(byte) : 컴퓨터의 기본 저장 단위
    • 1바이트(1 byte)는 8비트(8bit)이다.
    • 1바이트에는 2의 8승 즉 256개의 고유한 값을 저장할 수 있다.
  • 인코딩(encoding) : 문자열을 바이트로 변환하는 과정
  • 디코딩(decoding) : 바이트를 문자열로 변환하는 과정

1-1. 유니코드

  • 국제적으로 전세계 언어를 모두 표시할 수 있도록 만든 표준 코드
  • 파이썬에서 모든 문자열은 유니코드(UTF-8)로 표현
  • 파이썬에서는 문자열이 무조건 유니코드로 인코딩되므로 해당 텍스트가 인코딩되어 있는지 고려하면 됨

Unicode와 UTF-8 간단히 이해하기

2. 문자열

2-1. 이스케이프 문자

+) 문자열이 시작하는 따옴표 앞에 ‘r’을 붙이면 이스케이프 문자가 적용X → 원시 문자열

2-2 . startswith, endswith

  • .startswith(’xx’) : xx로 시작하는 문자열 찾기
  • .endswith(’xx’) : xx로 끝나는 문자열 찾기

2-3. 공백 문자 처리 : trimming

  • 스페이스(space) : 한 칸 띄어쓰기
  • 탭(tab) \t : 네 칸 띄어쓰기. 때에 따라 두 칸 띄어쓰기로 표기
  • 라인 피드 (line feed, 개행) \n : 줄 바꿈을 엄밀히 말하면 라인 피드라고 함.
  • 캐리지 리턴 (carriage return, 복귀) \r : 커서를 맨 앞으로 보내고,\r 뒤에 문자가 있으면 그 문자를 출력
  • strip() 메서드를 사용해 공백 문자 처리.
    • 양쪽 공백 제거 : .strip()
    • 왼쪽 공백 제거 : .lstrip()
    • 오른쪽 공백 제거 : .rstrip()

2-4. 대소문자 변경

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

2-5. isX 형태의 메서드

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

2-6. join(), split(), replace()

  • join() : 각각의 원소를 모아 하나의 문자열로 합쳐 줌
stages = ['fundamentals', 'exploration', 'goingdeeper']
",".join(stages)

[out] 'fundamentals,exploration,goingdeeper'
  • split() : 하나의 문자열을 구분자를 기준으로 나누어 줌
'fundamentals,exploration,goingdeeper'.split(',')

[out] ['fundamentals', 'exploration', 'goingdeeper']
  • replace() : replace() : replace(s1, s2) 형태로 문자열 내 문자열 s1을 s2로 바꿔줌
sent = 'I can do it!'
sent.replace('I', 'You')

[out] 'You can do it!'

2-7. mutable vs immutable

[Python 변수] mutable과 immutable의 차이

3. 정규 표현식

3-1. 정규 표현식 사용

  • 특정 규칙을 가진 문자열의 집합을 표현하는 형식 언어
  • 찾고자 하는 문자열 패턴을 정의하고 기존 문자열과 일치하는지를 비교하여 문자열을 검색하거나 다른 문자열로 치환하는데 사용
  • ex. 이메일, 주민등록번호, 전화번호, 우편번호, URL 등
# 1단계 :  "the"라는 문자열의 패턴 정의 → 컴파일(compile)
pattern = re.compile("the")    

# 2단계 : 정의된 패턴과 매칭되는 문자열 검색
pattern.findall('of the people, for the people, by the people')

[out] ['the', 'the', 'the']
re.findall('the', 'of the people, for the people, by the people')
# 컴파일 과정 없어도 가능

[out] ['the', 'the', 'the']

3-2. 메서드

  • 메서드 종류
    • search() : 일치하는 패턴 찾기 (일치 패턴이 있으면 MatchObject를 반환)
    • match() : search()와 비슷하지만, 처음부터 패턴이 검색 대상과 일치해야 함
    • findall() : 일치하는 모든 패턴 찾기 (모든 일치 패턴을 리스트에 담아서 반환)
    • split() : 패턴으로 나누기
    • sub() : 일치하는 패턴으로 대체하기
    • group() : 실제 결과에 해당하는 문자열을 반환

3-3. 패턴 : 특수문자, 메타문자

  • 특수문자, 메타문자
    • [ ] : 문자
    • `` : 범위
    • . : 하나의 문자
    • ? : 0회 또는 1회 반복
    • `` : 0회 이상 반복
    • + : 1회 이상 반복
    • {m, n} : m ~ n
    • \d : 숫자, [0-9]와 동일
    • \D : 비 숫자, [^0-9]와 동일
    • \w : 알파벳 문자 + 숫자 + _[a-zA-Z0-9_]와 동일
    • \W : 비 알파벳 문자 + 비숫자, [^a-zA-Z0-9_]와 동일
    • \s : 공백 문자, [ \t\n\r\f\v]와 동일
    • \S : 비 공백 문자, [^ \t\n\r\f\v]와 동일
    • \b : 단어 경계
    • \B : 비 단어 경계
    • \t : 가로 탭(tab)
    • \v : 세로 탭(vertical tab)
    • \f : 폼 피드
    • \n : 라인 피드(개행문자)
    • \r : 캐리지 리턴(원시 문자열)
text = """
The first season of America Premiere League  was played in 1993. 
The second season was played in 1995 in South Africa. 
Last season was played in 2019 and won by Chennai Super Kings (CSK).
CSK won the title in 2000 and 2002 as well.
Mumbai Indians (MI) has also won the title 3 times in 2013, 2015 and 2017.
"""
pattern = re.compile("[1-2]\d\d\d")
pattern.findall(text)

[out] ['1993', '1995', '2019', '2000', '2002', '2013', '2015', '2017']

▶ 1000년 이후의 년도를 찾기 위함 → [1-2]\d\d\d

phonenumber = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
phone = phonenumber.search('This is my phone number 010-111-1111')
if phone:
  print(phone.group())

\d\d\d-\d\d\d-\d\d\d\d\d{3}-\d{3}-\d{4}(\d{3}-){2}\d{4}

4. 파일과 디렉터리

4-1. 파일(file)

  • write
f = open("hello.txt","w")  # 파일을 열고 파일 객체를 반환
for i in range(10):
    f.write("안녕") 
f.close()                  # 작업이 끝나면 close() 꼭 메서드로 닫아주기!

print("완료!")
  • read
with open("hello.txt", "r") as f:
  print(f.read())

[out] 안녕안녕안녕안녕안녕안녕안녕안녕안녕안녕

‘hello.txt’ 파일에 저장된 내용이 읽힘

  • 메서드

    f.read() : 파일을 읽는다.

    f.readline() : 파일을 한 줄씩 읽는다.

    f.readlines() : 파일 안의 모든 줄을 읽어 그 값을 리스트로 반환한다.

    f.write(str) : 파일에 쓴다. 문자열 타입을 인자로 받는다.

    f.writelines(str) : 파일에 인자를 한 줄씩 쓴다.

    f.close() : 파일을 닫는다.

    f.seek(offset) : 해당 파일의 위치(offset)를 찾아 파일의 커서를 옮긴다. 파일의 처음 위치는 0이다.

    f.tell(): 현재 커서의 위치를 반환한다.

[python] 파이썬 파일읽기, 파일쓰기 (open , close, write, read, tell, seek)

4-2. 디렉터리

디렉터리와 폴더 그리고 파일의 차이

4-3. 모듈과 패키지

  • 모듈(module) : 파이썬으로 만든 코드가 들어간 파일 .py

  • 패키지(package) : 기능적으로 동일하거나 동일한 결과를 만드는 모듈들의 집합 또는 폴더. 종종 라이브러리라고도 불림

  • 라이브러리(library) : 모듈과 패키지의 집합. 패키지보다 포괄적인 개념이나 패키지와 혼용되어 사용되기도 함.

  • PIP(Package Installer for Python) : 패키지 관리자로 파이썬을 설치하면 기본으로 설치

  • PyPA(Python Packaging Authority) : 파이선 패키지를 관리하고 유지하는 그룹

  • PyPI(The Python Package Index) : 파이썬 패키지들의 저장소

  • 함수

    sys.path : 현재 폴더와 파이썬 모듈들이 저장되는 위치를 리스트 형태로 반환

    sys.path.append() : 자신이 만든 모듈의 경로를 append 함수를 이용해서 추가함. 그 후 추가한 디렉터리에 있는 파이썬 모듈을 불러와 사용할 수 있다.

    os.chdir() : 디렉터리 위치 변경

    os.getcwd() : 현재 자신의 디렉터리 위치를 반환

    os.mkdir() : 디렉터리 생성

    os.rmdir() : 디렉터리 삭제 (단, 디렉터리가 비어 있을 경우)

    glob.glob() : 해당 경로 안의 디렉터리나 파일들을 리스트 형태로 반환

    os.path.join() : 경로(path)를 병합하여 새 경로 생성

    os.listdir() : 디렉터리 안의 파일 및 서브 디렉터리를 리스트 형태로 반환

    os.path.exists() : 파일 혹은 디렉터리의 경로 존재 여부 확인

    os.path.isfile() : 파일 경로의 존재 여부 확인

    os.path.isdir() : 디렉터리 경로의 존재 여부 확인

    os.path.getsize() : 파일의 크기 확인


수강후기

어제보다 훨씬 어려워서 무슨 말이지 하면서 여러번 읽어봤다. 사실 아직도 정확히 이해하지 못한 것들이 있지만 퍼실님께서 다른 것을 공부하다보면서 익숙해질거라고 하셔서 마음이 놓이긴 했다.

지금 당장 모든 걸 이해하려고 하지 말고, 차차 하나씩 배워가며 이해해보쟈 😊

profile
아직은 예비 데이터분석가

0개의 댓글