7. 텍스트(문자열, 파일 다루기)

정문희·2022년 2월 28일
0

LMS

목록 보기
1/4
post-thumbnail

7. 텍스트(문자열, 파일 다루기)

7-2. 텍스트 데이터를 문자열로 저장 - (1) 인코딩과 디코딩

  1. 문자열(string)
    : 작은따옴표(') 혹은 큰따옴표(")로 묶인 일련의 문자
  2. 인코딩과 디코딩
    • 메모리에는 바이트로 저장
    • 바이트(byte) : 컴퓨터의 기본 저장 단위
      • 1byte = 8bit
    • 1바이트에는 2의 8승 즉, 256개의 고유한 값을 저장가능
    • 인코딩 (encoding): 문자열을 바이트로 변환하는 과정
    • 디코딩 (decoding) : 바이트를 문자열로 변환하는 과정
  3. 인코딩
    • 유니코드(Unicode) :전 세계 문자를 모두 표시할 수 있는 표준 코드를 제정
      • 오직 한 가지 버전만 존재
    • 인코딩하는 방식 : UTF-8, UTF-16 등 존재
    • 파이썬 내장함수 ord()와 chr()
      • ord() : 해당 문자에 대응하는 유니코드 숫자를 반환
      • chr() : 해당 유니코드 숫자에 대응하는 문자를 반환
    • 파이썬에서 모든 문자열은 유니코드로 표현 가능
      • 파이썬 3부터 유니코드 규약에 따름
      • 파이썬 2 인코딩 방법
        :아스키(ascii) → 유니코드(unicode) 변환 등의 작업 수행
      • 파이썬 3 인코딩
        : 문자열이 무조건 유니코드로 인코딩

7-3. 텍스트 데이터를 문자열로 저장 - (2) 문자열 다루기

  1. 이스케이프 문자()
    • 직접 입력할 수 없는 일부 문자를 문자열에 포함시킬 수 있는 특수 문자
    • t : 탭
    • n : 줄바꿈
  2. 원시문자열
    • 이스케이프 문자를 무시하고 싶을 때 사용
    • 문자열 앞에 r을 붙이면 이스케이프 문자 무시
  3. 특정문자 찾기 - startswith, endswith
    • startswith : 앞에서 특정문자 찾기
    • endswith : 뒤에서 특정문자 찾기
    • 변수명.startswith('찾고 싶은 문자') or 변수명.endswith('찾고 싶은 문자')
  4. 여러 가지 공백 문자
    • 스페이스(space) : 한 칸 띄어쓰기
    • 탭(tab) \t : 네 칸 띄어쓰기. 때에 따라 두 칸 띄어쓰기로 표기
    • 라인 피드 (line feed, 개행) \n : 줄 바꿈
    • 캐리지 리턴 (carriage return, 복귀) \r :
      • 커서를 맨 앞으로 이동시키는 것, 커서를 원위치로 복귀(return)
      • \r 뒤의 문자를 출력
  5. 공백문자제거 - strip
    • 변수명.strip()
    • strip() : 양쪽 공백제거
    • lstrip() : 왼쪽 공백제거
    • rstrip() : 오른쪽 공백제거
  6. 알파벳 대, 소문자 변환 - 변수명.upper() or 변수명.lower() or 변수명.capitalize()
    • 원본 파괴 되지 않음
    • upper() : 모든 문자를 대문자로 변환
    • lower() : 모든 문자를 소문자로 변환
    • capitalize() : 첫 글자만 대문자로 변환
  7. is~~메소드 : 블린(boolean)값 반환
    • isupper() : 문자열이 모두 대문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
    • islower() : 문자열이 모두 소문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
    • istitle(): 문자열의 첫 글자만 대문자로 되어 있으면 True, 그렇지 않으면 False를 반환
    • isalpha(): 문자열이 모두 알파벳 문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
    • isalnum(): 문자열이 모두 알파벳 문자와 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환
    • isdecimal(): 문자열이 모두 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환
  8. 문자열 합치기 - join()
    • tuple, list, string 등 반복 가능한(iterable) 객체를 받는 메서드
    • "구분자".join(변수명)
    • 반환하는 자료형 : string
  9. 문자열 분리하기 - split()
    • 변수명.split('구분자')
    • 반환하는 자료형 : 리스트
  10. 다른 문자로 바꾸기 - replace()
    • 변수명.replace('원본문자', '변경문자')
  11. 가변 객체(mutable object)
    • 복사 하면 같은 주소 공유
    • 객체를 생성한 후 객체의 값을 수정 가능
    • 변수는 값이 수정된 같은 객체를 가리키게 됩니다.
    • list, set, dict
  12. 불변 객체(immutable object)
    • 복사하면 다른 주소를 가짐
    • 객체를 생성한 후 객체의 값을 수정 불가능
    • 변수는 해당 값을 가진 다른 객체를 가리키게 됩니다.
    • int, float, complex, bool, string, tuple, frozen set

7-4 정규 표현식 - 특정 문자열 잦기 좋음

  1. 파이썬에서 정규 표현식 시작하기
    • import re
  2. 찾는 패턴 정의하기
    • 변수명 = re.compile("찾는 문자열") and
    • ex) pattern = re.compile("the")
  3. 패턴 찾기
    • 변수명.findall(검색할 문장, 또는 파일??)
    • ex) pattern.findall('of the people, for the people, by the people')
  4. 한 줄에 정의, 찾기
    • re.findall('찾는 문자열', '찾을 문장')
    • re.findall('the', 'of the people, for the people, by the people')
  5. re 패키지 내 메서드
    • search() : 일치하는 패턴 찾기 (일치 패턴이 있으면 MatchObject를 반환)
    • match() : search()와 비슷하지만, 처음부터 패턴이 검색 대상과 일치해야 함
    • findall() : 일치하는 모든 패턴 찾기 (모든 일치 패턴을 리스트에 담아서 반환)
    • split() : 패턴으로 나누기
    • sub() : 일치하는 패턴으로 대체하기
  6. MatchObject를 반환하는 메서드
    • search(), match()
    • MatchObject에서 문자열만 반환하는 메서드
      • group() : findall()은 리스트로 반환해서.. 번거롭나??
  7. 패턴 : 특수문자, 메타 문자
    • : 문자
    • : 범위
    • . : 하나의 문자
    • ? : 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 : 캐리지 리턴(원시 문자열)
  8. 예제
    • 특정연도 찾기 ex) pattern = re.compile("[1-2]\d\d\d")
      • 찾는 글자수 만큼 정의
      • [1-2] : 첫글자를 1,2로 한정 or ("\d\d\d\d")로 해도 됨
    • 전화번호 찾기 ex) phonenumber = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
      • \d\d\d == \d{3}
      • \d\d\d-\d\d\d- == (\d{3}-){2} : 괄호로 묶기
    • 이메일 찾기 ex) pattern = re.compile("[0-9a-zA-Z]+@[0-9a-z]+.[0-9a-z]+")
      • [0-9a-zA-Z]+ : 0~9, 알파벳 대소문자 여러번 등장
      • [0-9a-zA-Z]+ : 0~9, 알파벳 소문자 여러번 등장
      • +는 여러번 등장(1회 이상 반복)
  9. 구현순서
    • import re 를 통해 정규식 모듈을 가져오기
    • re.compile() 함수로 Regex 객체를 만들기
    • 검색할 문자열을 Regex 객체의 search() , findall() 메소드로 전달하기

7-5 파일과 디렉토리 (1) 파일

  1. 파일열기

    • open("파일명", 파일코드)
    • 파일코드
      • "r" : 읽기, 파일없으면 에러, 파일의 시작점으로 이동
      • "r+" : 읽기, 쓰기 , 파일없으면 에러, 파일의 시작점으로 이동, 기존 데이터에 덮어쓰기
      • "w" : 쓰기 , 파일없으면 새로 생성
      • "w+" : 읽기, 쓰기 , 파일없으면 새로 생성, 기존 데이터 없애고 새로 쓰기
      • "a" : 쓰기, 파일의 끝으로 이동, 파일없으면 새로 생성
      • "a+" : 쓰기, 파일의 끝으로 이동 데이터 추가, 파일없으면 새로 생성
  2. 파일 관련 메서드

    • f.read() : 파일을 읽기
    • f.readline() : 파일을 한 줄씩 읽기
    • f.readlines() : 파일 안의 모든 줄을 읽어 그 값을 리스트로 반환
    • f.write(str) : 파일에 쓰기. 문자열 타입을 인자로 받는다.
    • f.writelines(str) : 파일에 인자를 한 줄씩 쓴다.
    • f.close() : 파일을 닫는다.
    • f.seek(offset) : 해당 파일의 위치(offset)를 찾아 파일의 커서를 옮긴다. 파일의 처음 위치는 0
    • f.tell(): 현재 커서의 위치를 반환한다.
  3. with

    • 파일을 오픈해서 닫기까지 마무리
    with open('textfile.txt', 'r') as file:
        contents = file.read()
    
    # 위 구문과 동일한 내용
    file = open('textfile.txt', 'r')
    contents = file.read()
    file.close()

7-6 파일과 디렉터리 (2) 디렉토리

  1. 최상위 폴더(루트 디렉토리)
    • Window 운영 체제 : C:\
    • Linux 계열 운영 체제(우분투-ubuntu) : /
  2. 리눅스 명령어

7-7 파일과 디렉터리 (3) 모듈과 패키지

  1. 디렉터리 관련 표준 라이브러리
  • sys : 인터프리트 제어
  • os : 운영체제(OS : Operating System)를 제어
  • glob : 유닉스 스타일 경로명 패턴 확장
  1. 모듈과 패키지 개념
    • 모듈(module) : 파이썬으로 만든 코드가 들어간 파일 .py
    • 패키지(package) : 기능적으로 동일하거나 동일한 결과를 만드는 모듈들의 집합 또는 폴더. 종종 라이브러리라고도 불림
    • 라이브러리(library) : 모듈과 패키지의 집합. 패키지보다 포괄적인 개념이나 패키지와 혼용되어 사용되기도 함.
    • PIP(Package Installer for Python) : 패키지 관리자로 파이썬을 설치하면 기본으로 설치됨
    • PyPA(Python Packaging Authority) : 파이선 패키지를 관리하고 유지하는 그룹
    • PyPI(The Python Package Index) : 파이썬 패키지들의 저장소
  2. 모듈과 패키지 함수
    • 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() : 파일의 크기 확인

7-8. 여러가지 파일 포맷 다루기 (1) CSV 파일

  1. CSV( Comma Seperated Value) : 쉼표로 구분된 파일

7-9. 여러가지 파일 포맷 다루기 (2) XML 파일 : HTML과 비슷

  1. XML(Extensible Markup Language) : 다목적 마크업 언어

    • 꺾쇠 모양의 괄호(< >)로 구분된 언어
    • 마크업 언어는 태그(tag)로 이루어진 언어, 상위(부모) 태그 - 하위(자식) 태그의 계층적 구조
    • XML은 요소(element)들로 이루어져 있다.
    • 요소는 <열린 태그> 내용 </닫힌 태그>가 기본적인 구조, 속성(attribute) 값을 가질 수도 있다.
  2. ElementTree : 파이썬 표준 라이브러리, XML 관련 기능 제공

    • Element() : 태그 생성
    • SubElement() : 자식 태그 생성
    • tag : 태그 이름 변경 사용
    • text : 텍스트 내용 생성
    • attrib : 속성 생성
    • dump() : 생성된 XML 요소 구조를 시스템(sys.stdout)에 쓰기, 출력 형식은 일반 XML 파일로 기록
    • write() : XML 파일로 저장
    • append(), insert(), remove(), pop() 메서드를 제공
  3. XML 파싱

    • 파싱(parsing, 구문 분석)
      • 어떤 문자열을 의미 있는 토큰(token)으로 분해, 문법적 의미와 구조를 반영한 파스 트리(parse tree)를 만드는 과정
      • 특정 태그명이나 속성값 등을 불러오기 가능
    • BeautifulSoup, lxml을 pip로 설치

    7-10. 여러가지 파일 포맷 다루기 (3) JSON 파일

    1. JSON(JavaScript Object Notation) : 웹 언어인 JavaScript의 데이터 객체 표현 방식
      • 파이썬의 dictionary 타입과 매우 유사한 구조
      • CSV 파일에 비해 좀 더 유연하게 데이터를 표현가능
      • XML 파일보다 파일을 쉽게 읽고 쓸 수 있다는 장점
      • Javascript로 작성된 프로그램에서 쉽게 다룰 수 있음
    2. JSON 파싱
      • 파이썬 dictionary 타입은 JSON으로 저장 가능
      • JSON 파일의 내용을 아래처럼 파이썬 dict 객체로 쉽게 읽어들일 수 있음
profile
안녕하세요~ 초보개발자입니다.

0개의 댓글

관련 채용 정보