25.6 연습문제: 파일 경로에서 파일명만 가져오기
다음 소스 코드를 완성하여 파일 경로에서 파일명만 출력되게 만드세요. 단, 경로에서 폴더의 깊이가 달라지더라도 파일명만 출력할 수 있어야 합니다.
practice_string_path.py
path = 'C:\\Users\\dojang\\AppData\\Local\\Programs\\Python\\Python36-32\\python.exe' _________________________________ ... _________________________________ print(filename)
실행 결과
python.exe
정답
x = path.split('\\') x.reverse() filename = x[0] 또는 path[path.rfind('\\') + 1:]
해설
파일 경로 path에서 파일명만 출력해야 하는데 경로에서 폴더의 깊이는 달라질 수 있다고 했습니다. 그래서 다음과 같이 path.split('\\')를 사용해서 path를 '\\' 기준으로 분리한 뒤 리스트에서 마지막 요소 직접 가져오면 폴더의 깊이가 달라졌을 때 파일명을 가져올 수 없습니다.
x = path.split('\\') filename = x[8] # 폴더의 깊이가 달라졌을 파일명을 가져올 수 없음
따라서 x = path.split('\\')로 문자열을 분리하여 리스트로 만든 뒤 reverse로 순서를 뒤집어줍니다. 그다음에 filename = x[0]처럼 첫 번째 요소를 가져오면 파일명을 가져올 수 있습니다. 파일 경로에서 항상 마지막은 파일명이므로 리스트의 순서를 뒤집으면 항상 첫번째 요소가 파일명이 됩니다. 이렇게 하면 폴더의 깊이가 달라지더라도 파일명을 가져올 수 있습니다.
이 방법 이외에도 rfind를 사용하면 좀더 간단히 파일명을 구할 수 있습니다. 파일 경로에서 파일명은 항상 마지막에 있으므로 path.rfind('\\')와 같이 rfind를 사용하여 오른쪽에서부터 '\\'의 인덱스를 찾습니다. 그리고 path[path.rfind('\\') + 1:]와 같이 찾은 인덱스 + 1부터 문자열의 마지막까지 가져오면 파일명을 가져올 수 있습니다. 즉, path.rfind('\\')로 찾은 인덱스는 '\\'의 인덱스이므로 '\\' 다음에 있는 파일명만 구하기 위해서 1을 더해줍니다.
그리고 \는 제어 문자를 위한 이스케이프입니다. 따라서 \ 문자 자체를 찾을 때는 \를 두 번 써야 합니다.