from pathlib import Path
home = Path.home()
test = Path('test.txt')
print(home)
print(test)
C:\Users\MSI
test.txt
Path.home(): 현재 사용자 홈 디렉토리 반환
Path('test.txt'): 현재 경로 기준 파일 경로 생성
from pathlib import Path
import os
p = Path('data') / 'sample.txt'
p_os = os.path.join('data', 'sample.txt')
print(p)
print(p_os)
data\sample.txt
data\sample.txt
from pathlib import Path
import os
p = Path('sample.txt')
p_os = os.path.exists('sample.txt')
print(p.exists())
print(p_os)
False
False
exists()로 파일 존재 확인
from pathlib import Path
import os
p = Path('data') / 'sample.txt'
p_os = os.path.join('data', 'sample.txt')
print(p.is_file())
print(p.is_dir())
print(os.path.isfile(p_os))
print(os.path.isdir(p_os))
파일인지 디렉토리인지 확인
from pathlib import Path
import os
Path("path_dir").mkdir()
os.mkdir('os_dir')
디렉토리 생성 기본
from pathlib import Path
Path("a/b/c").mkdir(parents=True)
하위 디렉토리까지 생성(중간 경로가 없어도 전부 생성)
from pathlib import Path
Path("new_dir").mkdir(exist_ok=True)
exist_ok=True: 이미 존재해도 에러를 안띄움(실무에서 거의 필수)
from pathlib import Path
p = Path('test.txt')
text = p.read_text(encoding='utf-8')
print(text)
hello world
파일 읽기
인코딩 명시하지 않으면 OS에 따라 깨질 수 있음
from pathlib import Path
p = Path('test.txt')
p.write_text('bye world', encoding='utf-8')
파일 쓰기
인코딩 명시하지 않으면 OS에 따라 깨질 수 있음
from pathlib import Path
p = Path('.')
for f in p.iterdir():
print(f)
data
main.py
test.txt
iterdir(): 모든 파일/디렉토리 순회
from pathlib import Path
for f in Path('.').glob('*.txt'):
print(f)
glob: 특정 패턴 파일만 찾음
from pathlib import Path
p = Path('data') / 'sample.txt'
print(p.name)
print(p.suffix)
print(p.stem)
print(p.parent)
sample.txt
.txt
sample
data
name: 파일 이름
suffix: 확장자명
stem: 확장자제외
parent: 부모 디렉토리
from pathlib import Path
p = Path('test.txt').resolve()
print(p)
C:\Users\MSI\OneDrive\바탕 화면\PythonStudy\test.txt
resolve(): 파일의 절대 경로를 반환하고 심볼릭 링크도 실제 경로로 반환
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent
현재 파이썬 파일이 위치한 디렉토리 경로를 기준으로 잡음
실행 위치가 바뀌어도 동일한 기준 경로를 유지
from pathlib import Path
p = Path('config.json')
if p.exists() and p.is_file():
data = p.read_text(encoding='utf-8')
더 많은 실전 패턴은 다른 모듈들까지 살펴본 뒤 적용해보기로