본문 바로가기
C.W.K.
Stream
Lesson 09 of 12 · published

파일 경로

~8 min · paths, files

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

경로 구분자는 운영체제마다 달라

Unix 계열은 /를 사용하고 Windows는 \를 기본 구분자로 사용해. 현대 Windows가 /도 받아들이는 경우가 있어도 드라이브 문자, 네트워크 경로, 예약 이름 같은 규칙까지 생각하면 정규식 하나로 실제 경로를 판정하기는 어려워.

제한된 텍스트에서 찾는 패턴은 만들 수 있어

단순한 Unix식 경로 후보는 다음처럼 표현할 수 있어.

(?:/?[\w.-]+)+/?

확장자가 있는 단순 파일 이름은 ([\w-]+)\.(\w+)$, 마지막 점 뒤의 확장자만 필요하면 \.([^.]+)$로 찾을 수 있어.

긴 텍스트 안에서 ./, /, ~/로 시작하는 후보를 찾는 예시는 이래.

(?:\./|/|~/)[\w./-]+

이 패턴들은 허용 문자를 일부로 제한한 검색용 예시지, 모든 유효한 파일 이름과 경로를 검증하는 규칙은 아니야.

경로를 조작할 때는 전용 라이브러리를 써

Python의 pathlib.Path.name, .stem, .suffix, .parent, .parts로 경로를 안전하게 나눠 줘. JavaScript의 path, Go의 path/filepath도 같은 역할을 해. 정규식은 더 큰 글에서 경로처럼 보이는 후보를 찾는 데만 사용해.

Code

경로 패턴·python
import re
from pathlib import Path

# 텍스트에서 경로 찾기
PATH_FIND = re.compile(r'(?:\./|/|~/)[\w./-]+')
re.findall(PATH_FIND, 'edit /etc/hosts and ./local.cfg and ~/Documents/notes.md')
# ['/etc/hosts', './local.cfg', '~/Documents/notes.md']

# 정규식으로 extension 추출
EXT = re.compile(r'\.([^.]+)$')
m = EXT.search('photo.tar.gz')
m.group(1)  # 'gz'  — 마지막 extension 만

# 더 좋음: pathlib 사용
p = Path('photo.tar.gz')
p.suffix    # '.gz'
p.suffixes  # ['.tar', '.gz']
p.stem      # 'photo.tar'
p.name      # 'photo.tar.gz'
p.parent    # PosixPath('.')

# Extension 없는 파일명
FNAME = re.compile(r'([\w-]+)\.(\w+)$')
m = FNAME.search('photo.jpg')
print(m.group(1), m.group(2))  # 'photo' 'jpg'

External links

Exercise

pathlib.Path.iterdir로 디렉터리 항목을 읽고, 이름이 log로 시작해 .txt로 끝나는 파일만 정규식으로 골라 출력해. 경로 탐색은 pathlib가 맡고 정규식은 파일 이름 필터만 맡도록 역할을 나눠.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.