5. 문자열과 파일

곽정은·2021년 1월 13일
1

정리

목록 보기
5/5

안녕하세요. 곽정은입니다.

노드에 연속적으로 파이썬 문법과 관련된 내용이 나오네요. 풀 때는 오전시간 안에 다 풀었던 것 같은데 정리하려니깐 시간이 정말 오래 걸립니다. 이번에도 알고 있는 줄 알았는데 사실 잘 몰랐던 내용 위주로 정리하겠습니다.


문자열

  • 텍스트 데이터를 나타내는 문자열(literal; 리터럴)은 ', "로 묶인 일련의 문자이다.

인코딩과 디코딩

  • 변수에 데이터를 할당하면 이 데이터들은 컴퓨터의 주기억장치인 메모리(RAM)에 0과 1로 변환되어 저장된다.

  • 데이터의 최소 단위는 비트(bit)이고, 비트가 8개 모이면 바이트(byte)가 된다. 1 바이트에는 2의 8승, 즉 256개의 고유한 값을 저장할 수 있다.

  • 바이트는 컴퓨터의 기본 저장단위로써 메모리에는 바이트로 저장이 된다.

  • 인코딩(encoding)은 문자열을 바이트로 변환하는 과정이고, 디코딩(decoding)은 바이트를 문자열로 변환하는 과정이다.

  • 인코딩하는 방법은 문자를 각가 숫자에 대응시키고 해당 숫자를 이진수로 변환하면 된다.

  • 텍스트 데이터를 전세계에서 동일하게 오류없이 처리하기 위해서 ISO(International Standards Organozation)는 유니코드를 표준코드로 제정했다.

  • 유니코드는 오직 한가지 버전만 존재하고 UTF-8, UTF-16 등은 유니코드로 정의된 텍스트를 메모리에 인코딩하는 방식을 말한다.

  • 파이썬 내장함수인 ord()는 해당 문자에 대응하는 유니코드 숫자를 반환하고, chr()는 해당 유니코드 숫자에 대응하는 문자를 반환한다.

  • 파이썬 3부터 모든 문자열은 유니코드로 표현된다. 외부 데이터 및 데이터베이스로부터 데이터를 읽거나 보낼 때 인코딩/디코딩 작업을 거져야 하는데, 인코딩 규약으로 내부적으로는 유니코드(UTF-8)인 것이다. 그래서 인코딩/디코딩 여부만 고려하면 된다.

  • 파이썬 2에서 문자열은 인코딩/디코딩 여부와는 관계없이 string, unicode string으로 구분이 되어있었다. 그래서 인코딩을 한 후에도 아스키(ascii)에서 유니코드(unicode) 변환 등의 작업을 거쳐야 했었다.

이스케이프 문자와 원시 문자열

  • 이스케이프 문자는 \[특정문자] 형태로 직접 입력할 수 없는 일부 문자를 문자열에 포함시킬 수 있는 특수문자이다.

\'           홑따옴표 '
\"           쌍따옴표 "
\t           탭
\n           줄바꿈
\\           백슬래시

  • 원시 문자열은 이스케이프 문자를 무시하고 싶을 때 사용한다. 문자열을 시작하는 따옴표 앞에 r을 붙이면 된다.

공백 문자 처리

  • 공백 문자는 띄어쓰기로 표기되는 항목으로, trimming이라고 불린다.

스페이스(space): 한 칸 띄어쓰기
탭(tab): 4 칸 띄어쓰기, 경우에 따라 2 칸 띄어쓰기
줄 바꿈
라인 피드(line feed) \n: 줄바꿈의 또 다른 말
개행 복귀(carriage return) \r: 커서를 맨 앞으로 이동시키는 것(복귀)

  • 공백 문자는 파이썬에서 strip()메서드로 제거할 수 있다.

대소문자 변환

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

isX

  • isX 형태의 메소드는 문자열의 구성에 따라 boolean의 값을 반환해준다.

isupper(): 문자열이 모두 대문자로 되어 있으면 True, 아니라면 False
islower(): 문자열이 모두 소문자로 되어 있으면 True, 아니라면 False
istitle(): 문자열의 첫 글자만 대문자로 되어 있으면 True, 아니라면 False
isalpha(): 문자열이 모두 알파벳으로 되어 있으면 True, 아니라면 False
isalnum(): 문자열이 모두 알파벳과 숫자로 되어 있으면 True, 아니라면 False
decimal(): 문자열이 모두 숫자로 되어 있으면 True, 아니라면 False

join()과 split()

  • join()은 인자로 시퀀스 등의 반복 가능한 객체를 받는 메소드로, 각각의 원소를 모아서 하나의 문자열로 합쳐준다.

  • split()하나의 문자열을 기준으로 나누어 준다. 구분자를 지정해주지 않으면 쉼표(,)를 기준으로 나누어 준다.

  • split()은 리스트를 반환하고, join()은 문자열을 반환한다.

가변객체와 불변객체

  • 가변객체는 객체를 생성한 후에 객체 값을 수정할 수 있으며, 변수는 값이 수정된 같은 객체를 가리키게 된다. 예로는 리스트, 집합, 딕셔너리가 있다.

  • 불변객체는 객체를 생성한 후 객체 값을 수정할 수 없으며, 변수는 해당 값을 가진 다른 객체를 가리키게 된다. 예로는 int, float, complex, frozen set, 불리언, 문자열, 튜플 등이 있다.

정규 표현식

  • 정규 표현식은 찾고자 하는 문자열 패턴을 정의하고 기존 문자열과 일치하는지를 비교하는 것이다. 정규 표현식이 있기에 운영 체제가 지원하는 단어 검색 기능을 사용할 11수 있는 것이다.

  • 파이썬에서는 import re를 통해 정규 표현식을 사용할 수 있다.

  • 정규 표현식의complie()은 찾고자 하는 문자열을 찾아 패턴을 정의하는 것이다. 예를 들자면pattern = re.complie("the")의 경우는 "the"라는 패턴을 컴파일 후 패턴 객체를 반환하는 것이다.

  • 정규 표현식의 findall()은 정의된 패턴과 매칭되는 경우를 찾는 것이다. 앞에서 컴파일된 객체를 활용하여 다른 텍스트에서 검색을 수행하는 것이다. 컴파일 과정이 없어도 findall('찾고자 하는 단어','다른 텍스트')를 하면 한줄로 검색이 가능하다.

패턴 객체에 활용가능한 메소드

search(): 일치하는 패턴을 찾아 일치하는 객체를 반환
match(): search()와 비슷하지만 패턴이 검색 대상에 처음부터 일치해야 함
findall(): 일치하는 모든 패턴 찾기, 리스트에 넣어 반환
split(): 패턴으로 나누기
sub(): 일치하는 패턴으로 대체하기
group(): 일치하는 객체일 경우, 실제 결과에 해당하는 문자열을 반환

패턴

  • 특수문자(메타문자)에는 ```[] . - ? * + / 등이 있는데, 이로 특수한 패턴을 만들 수 있다.

[]: 문자
-: 범위
.: 하나의 문자
?: 0회 or 1회 반복
*: 0회 이상 반복
+: 1회 이상 반복
{n,m}: m에서 n까지
\d: 숫자
\D: 숫자 아닌 것
\w: 알파벳
\W: 알파벳 아닌 것
\s: 공백 문자
\S: 공백 문자 아닌 것
\b: 단어 경계
\B: 단어 경계 아닌 것

파일

  • 메모리에 저장되는 데이터는 전원이 공급되어야만 보존되는 휘발성을 가지고 있다.

  • 어떤 데이터들은 영구적으로 보존될 필요가 있기 때문에 ROM(Read Only Memory)이라는 보조기억장치에 데이터를 저장하는데, 이것을 파일이라고 한다.

열기, 쓰기, 읽기

  • f = open("temp.txt", "w")은 "temp.txt"라는 텍스트 파일을 생성하라는 코드이다.

-"w"는 쓰기모드로 파일을 입력할 때 사용하는데, 다른 모드들도 들어갈 수 있다. r은 읽기모드로 파일을 읽을 수만 있고, a는 추가모드로 파일에 마지막 내용을 추가할 때 사용한다.

-원래 파일을 open()으로 열면 f.close()로 닫아줘야 하지만 with구문을 사용하면 f.close()으로 닫아줄 필요가 없다. 자동으로 닫아지는 것이 보장되기에 with구문 사용을 권장한다.

  • with구문을 사용할 때 다음 줄부터는 들여쓰기가 필요하다.

  • f.read()는 f를 객체로 받아서 파일을 읽는다.

f.readline(): 파일을 한 줄씩 읽음
f.readlines(): 파일 안의 모든 줄을 읽어 그 값을 리스트로 반환
f.write(str): 파일에 쓰고, 문자열 타입을 인자로 받음
f.writelines(str): 파일에 인자를 한 줄씩 씀
f.seek(offset): 새 파일의 위치를 찾음

디렉토리

  • 파일이 저장되어 있는 위치가 폴더, 디렉토리이다.

  • 경로의 최상위 폴더는 루트 디렉토리라고 부른다.

파이썬 파일

  • 파이썬에서 지원하는 디렉토리 관련 표준 라이브러리는 sys, os, glob이다.

  • 모듈(module)은 파이썬 코드가 들어간 파일로 .py로 끝나며, 패키지(package)는 __init__.py가 포함된 폴더로 우리가 흔히 라이브러리라고 부른다.

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(): 경로를 병합해 새 경로 생성
os.listdir(): 디렉토리 안의 파일 및 서브 디렉토리 리스트
os.path.exists(): 파일 또는 디렉토리 경로 존재 여부 확인
os.path.isfile(): 파일 경로 존재 여부 확인
os.path.isdir(): 디렉토리 경로 존재 여부 확인
os.path.getsize(): 파일 크기 확인

파일 포맷

  • CSV는 Comma Seperated Value의 약자로, 쉼표로 칼럼이 구분된 파일이다.

  • CSV 파일은 pd.read_csv()을 통해 데이터프레임 형태로 읽을 수 있으며, 데이터 프레임은 df.to_csv()을 통해 CSV 파일로 읽을 수 있다.

  • XML은 Extensible Markup Language의 약자로, 다목적 마크업 언어이다. 요소들로 이루어진 이 마크업 언어는 인터넷 웹상에서 문서, 내용을 교환할 때 이용한다.

  • 태그라고 불리는 꺽괴 모양의 괄포로 구분된 언어이다. 태그는 <태그> 내용 <태그/>의 형태로 구성되어 있으며, 속성값이 포함될 수 있다.

  • 상위 태그 안에 하위 태그가 속해있을 수 있는데 이 경우 부모-자식 관계라고 한다.

  • API에서 데이터를 요청하고 저장할 때 XML이나 JSON 형식을 이용해 데이터를 교환한다.

  • 파이썬은 표준 라이브러리인 ElementTree로 XML관련 기능을 제공한다.

    Element(): 태그 생성
    SubElement(): 자식 태그 생성
    tag: 태그 이름
    text: 텍스트 내용 생성
    attrib: 속성 생성

    ```write()```: XML 파일로 저장
  • 이외의 append(), insert(), remove(), pop()과 같은 리스트와 유사한 메소드를 제공한다.

  • XML 파일은 BeautifulSoup4라는 라이브러리를 통해 파싱할 수 있다.

  • JSON은 JavaScript Object Notation의 약자로, 웹언어인 JavaScript의 데이터 객체 표현 방식이다.

  • 웹 브라우저와 다른 애플리케이션 사이에서 HTTP 요청으로 데이터를 보낼 때 널리 사용하는 표준 파일 포맷 중 하나로, XML과 더불어 웹 API나 config 데이터를 전송할 때 쓰인다.

  • 형태는 파이썬의 딕셔너리 형태와 비슷하며 CSV파일 보다 더 유연하게 데이터를 표현할 수 있으며, XML 파일보다 읽고 쓰기가 더 쉽다.

  • 파이썬 딕셔너리 형식은 JSON으로 저장할 수 있다.


적을 내용이 많아서 정말 오래 걸렸네요. 휴...
노드는 정리가 밀리고 있다...

그럼 20000~!

profile
인공지능 냉각시스템 개발기업 전략기획

0개의 댓글