본문 바로가기

Computer Science/AI Fundamental

문자열 & 파일과 디렉터리 파일

728x90

1. 텍스트를 문자열로 저장한다는 것

- 인코딩과 디코딩


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



2. 정규 표현식


- 정규 표현식 시작하기

  • 파이썬 표준 라이브러리인 re 모듈을 import해서 사용할 수 있습니다.
  • 정규 표현식의 사용법은 크게 2가지로 나뉩니다.
    1) 찾고자 하는 문자열의 패턴을 정의하는 단계(Compile)
    2) 정의된 패턴과 매칭하는 경우를 찾아 다양한 처리를 하는 단계

1) Compile()


#1단계 :  "the"라는 패턴을 컴파일한 후 패턴 객체를 리턴합니다. 
pattern = re.compile("the")
print(pattern)
#2단계 : 컴파일된 패턴 객체를 활용하여 다른 텍스트에서 검색을 수행합니다.
pt2 = pattern.findall('of the people, for the people, by the people')
print(pt2)

2) 메서드


  • 앞서 컴파일한 객체를 활용해서 호출 가능한 메서드와 속성을 알아보죠.
    • search() : 일치하는 패턴 찾기 (일치 패턴이 있으면 MatchObject를 반환합니다)
    • match() : search()와 비슷하지만, 처음부터 패턴이 검색 대상과 일치해야 합니다.
    • findall() : 일치하는 모든 패턴 찾기 (모든 일치 패턴을 리스트에 담아서 반환합니다)
    • split() : 패턴으로 나누기
    • sub() : 일치하는 패턴으로 대체하기
    • group() : 실제 결과에 해당하는 문자열을 반환합니다.
# match, group을 활용해 'My' 찾기
src = "My name is..."
regex = re.match("My", src)
print(regex)
if regex:
    print(regex.group())
else:
    print("No!")

# 실행 결과
<re.Match object; span=(0, 2), match='My'>
My

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 : 캐리지 리턴(원시 문자열)

예시 1

#- 전화번호(숫자, 기호)
phonenumber = re.compile(r'(\d{3}-){2}\d{4}')
phone = phonenumber.search('This is my phone number 010-111-1111')
if phone:
  print(phone.group())

# 실행 결과
010-111-1111

예시 2

#- 이메일(알파벳, 숫자, 기호)
text = "My e-mail adress is doingharu@naver.com, and tomorrow@naver.com"
pattern = re.compile("[0-9a-zA-Z]+@[0-9a-z]+\.[0-9a-z]+")
# 혹은 pattern = re.compile("\w+@\w+\.\w+") 이와 같이 작성해도 됩니다.
pattern.findall(text)

# 실행 결과
['doingharu@naver.com', 'tomorrow@naver.com']

4) 구현 순서 정리


  1. import re를 통해 정규식 모듈을 가져옵니다.
  2. re.compile()함수로 regex 개체를 만듭니다.
  3. 검색할 문자열을 regex 개체의 search(), findall() 메서드로 전달합니다.

3. 파일과 디렉터리 파일

1. 파일


write, read code

# write
with open("hello.txt","w") as f:
#- open(파일명, 파일모드)
# read
with open("hello.txt", "r") as f:
  print(f.read())

파일 관련 메서드

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

2. 모듈과 패키지


파이썬 모듈 및 패키지 개념 정리

  • 모듈(module) : 파이썬으로 만든 코드가 들어간 파일 .py
  • 패키지(package) : 기능적으로 동일하거나 동일한 결과를 만드는 모듈들의 집합 또는 폴더. 종종 라이브러리라고도 불림
  • 라이브러리(library) : 모듈과 패키지의 집합. 패키지보다 포괄적인 개념이나 패키지와 혼용되어 사용되기도 함.

함수

  • sys.path : 현재 폴더와 파이썬 모듈들이 저장되는 위치를 리스트 형태로 반환
  • sys.path.append() : 자신이 만든 모듈의 경로를 append 함수를 이용해서 추가함. 그 후 추가한 디렉터리에 있는 파이썬 모듈을 불러와 사용할 수 있다.
  • os.chdir() : 디렉터리 위치 변경 (change directory)
  • os.getcwd() : 현재 자신의 디렉터리 위치를 반환 (get current workding directory)
  • os.mkdir() : 디렉터리 생성
  • os.rmdir() : 디렉터리 삭제 (단, 디렉터리가 비어 있을 경우)
  • glob.glob() : 해당 경로 안의 디렉터리나 파일들을 리스트 형태로 반환
  • os.path.join() : 경로(path)를 병합하여 새 경로 생성
  • os.listdir() : 디렉터리 안의 파일 및 서브 디렉터리를 리스트 형태로 반환
  • os.path.exists() : 파일 혹은 디렉터리의 경로 존재 여부 확인
  • os.path.isfile() : 파일 경로의 존재 여부 확인
  • os.path.isdir() : 디렉터리 경로의 존재 여부 확인
  • os.path.getsize() : 파일의 크기 확인
728x90

'Computer Science > AI Fundamental' 카테고리의 다른 글

간단한 그래프 그리기  (0) 2022.02.21
Jupyter Notebook, Markdown  (0) 2022.02.21
Git과 GitHub 간단한 사용법  (0) 2022.02.21
여러 파일 포맷(CSV, XML, JSON)  (0) 2022.02.21
OT  (0) 2022.02.21