오늘은 정규표현식과 다양한 파일들을 다루는 방법에 대한 내용들이 주를 이뤘습니다.
정규표현식의 경우에는 기존에도 대충 검색해서 사용해보곤 했었는데 오늘에서야 어떻게 쓰는건지 이해했네요 ^_^
코딩 테스트를 준비하다보면 생각보다 쓰이는 경우가 많은데 미리 공부했었어야 했습니다ㅜㅜ
각각의 파일마다 정의된 문법들이 다르기 때문에 당장 암기는 어려울 것 같으나... 나중에 많이 쓰게 된다면 자동으로 외워질 것이라 생각합니다.
ps. 퍼실님께서 오늘 내용들 나중에 해커톤에서 많이 쓰일 예정이라고 하신다...☆
원시 문자열(Raw string)
-> 이스케이프 문자인 \를 이스케잎 문자로 동작하지 않고 그대로 표현
-> 문자열 앞에 r을 붙인다.
(ex) r'I don\'t like touch it'
Output: I don\'t like touch it
startwith, endwith
-> 코딩 예시: 'OB'로 시작하는 생산팀 직원 리스트
EmployeeID = ['OB94382', 'OW34723', 'OB32308', 'OB83461', 'OB74830', 'OW37402', 'OW11235', 'OB82345']
Production_Employee = [P for P in EmployeeID if P.startswith('OB')] # 'OB'로 시작하는 직원 ID를 다 찾아봅니다
여러 가지 공백 문자
- 스페이스(space) : 한 칸 띄어쓰기
- 탭(tab) \t : 네 칸 띄어쓰기. 때에 따라 두 칸 띄어쓰기로 표기되기도 합니다.
- 줄 바꿈(new line) : 줄 바꿈
- 라인 피드 (line feed, 개행) \n : 줄 바꿈을 엄밀히 말하면 라인 피드라고 합니다.
- 캐리지 리턴 (carriage return, 복귀) \r : 커서를 맨 앞으로 이동시키는 것, 즉 커서를 원위치로 복귀(return)한다는 뜻입니다. 커서를 맨 앞으로 보내고,\r 뒤에 문자가 있으면 그 문자를 출력합니다.
공백 문자 제거하기(trimming)
-> strip() 이용 (ex) print(String.strip())
-> srtip(), lstrip(), rstrip()
isX (Boolean)
- isupper() : 문자열이 모두 대문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
- islower() : 문자열이 모두 소문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
- istitle(): 문자열의 첫 글자만 대문자로 되어 있으면 True, 그렇지 않으면 False를 반환
- isalpha(): 문자열이 모두 알파벳 문자로만 되어 있으면 True, 그렇지 않으면 False를 반환
- isalnum(): 문자열이 모두 알파벳 문자와 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환
- isdecimal(): 문자열이 모두 숫자로만 되어 있으면 True, 그렇지 않으면 False를 반환
join()과 split()
1. join()
-> "구분자".join(반복 가능한 객체)
-> 문자열을 반환
2. split()
-> 문자열.split('구분자')
-> 리스트를 반환
replace()
-> replace(s1, s2) 형태로 문자열 내 문자열 s1을 s2로 바꿉니다.
-> 같은 문자가 여럿 있을때, 한 문자만 바꾸고 싶으면??
Mutable, Immutable
>>> a = [1, 2, 3] # 리스트 객체 [1, 2, 3]을 변수 a가 가리킵니다.
>>> b = a # 변수 b도 같은 리스트 객체를 가리키게 됩니다.
>>> id(a), id(b)
(1629394911880, 1629394911880)
>>> a is b
True
>>> a == b
True
>>> a[0] = 0 # 변수 a가 가리키는 리스트 객체의 첫번째 원소값을 변경해도(새로운 원소를 추가/삭제해도)
>>> id(a), id(b)
(1629394911880, 1629394911880)
>>> a is b # 변수 a와 b는 여전히 같은 객체를 가리킵니다.
True
>>> a == b # 그래서 두 변수가 가리키는 객체의 값이 동일하게 변경되어 있습니다.
True
>>> a, b
([0, 2, 3], [0, 2, 3])
-> list, set, dict 외에는 immutable이라고 보면 됨
>>> a = 10
# 변수 a가 정수 객체를 가리키도록 합니다.
>>> id(a)
1508732208
>>> id(10)
1508732208
>>>
>>> a = a + 1
# 변수 a가 가리키는 정수 객체에 1을 더합니다.
>>> id(a)
1508732240 # 변수 a가 가리키는 객체만 바뀌었을 뿐
>>> id(10)
1508732208 # 객체 10은 그대로입니다.
-> int, float, str, tuple 등 대부분 mutable
특정 규칙을 가진 문자열의 집합을 표현하는 형식 언어로, 찾고자 하는 문자열 패턴을 정의하고 기존 문자열과 일치하는지를 비교하여 문자열을 검색하거나 다른 문자열로 치환하는 데 사용
re 모듈을 import 해야함
숫자 [0-9] = \d<-> 비숫자 = \D
알파벳문자+숫자+_(언더바) [0-9a-zA-Z_] = \w <-> \W
공백문자 \s <-> 비공백문자 \S
구현 순서
1. import re 를 통해 정규식 모듈을 가져옵니다.
2. re.compile() 함수로 Regex 객체를 만듭니다.
3. 검색할 문자열을 Regex 객체의 search() , findall() 메소드로 전달합니다.
write
변수명 = open("파일경로", "w")
변수명.write("작성하고 싶은 내용")
변수명.close()
-> open 했으면 close 하는 것이 필수
read
변수명 = open("파일경로", "r")
print(변수명.read("작성하고 싶은 내용"))
변수명.close()
with 구문
with를 통해 open된 객체는 with 문이 종료될 때 자동으로 close 되는 것이 보장되므로, 시스템 리소스의 안정적 사용을 위해 with 문 활용을 권장
with open("파일경로", "형식") as 변수명:
작업 코드
f.read() : 파일을 읽는다. f.readline() : 파일을 한 줄씩 읽는다. f.readlines() : 파일 안의 모든 줄을 읽어 그 값을 리스트로 반환한다. f.write(str) : 파일에 쓴다. 문자열 타입을 인자로 받는다. f.writelines(str) : 파일에 인자를 한 줄씩 쓴다. f.close() : 파일을 닫는다. f.seek(offset) : 해당 파일의 위치(offset)를 찾아 파일의 커서를 옮긴다. 파일의 처음 위치는 0이다. f.tell(): 현재 커서의 위치를 반환한다.
5.1 파이썬에서는 지원하는 디렉터리 관련 표준 라이브러리
5.2 모듈 및 패키지
개념모듈(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() : 파일의 크기 확인
person = {
"first name" : "Yuna",
"last name" : "Jung",
"age" : 33,
"nationality" : "South Korea",
"education" : [{"degree":"B.S degree", "university":"Daehan university", "major": "mechanical engineering", "graduated year":2010}]
}