HOWTO · Python
Python 경로에서 확장자없이 파일 이름 가져 오기
이 자습서는 Python의 파일 경로에서 확장자없이 파일 이름을 가져 오는 방법을 보여줍니다.
이 페이지의 내용
경로에서 마지막 접미사를 뺀 파일 이름을 얻으려면 Path(file_path).stem을 사용하세요. 예를 들어 Desktop/folder/myfile.txt 경로의 stem은 myfile입니다. Path.stem은 속성이므로 괄호 없이 접근합니다. 아래 예제는 경로 문자열을 사용해 결과 이름을 출력합니다.
마지막 접미사를 뺀 파일 이름 가져오기: Path.stem
pathlib.Path는 현재 플랫폼에 맞는 경로 구분자를 처리하므로 경로를 직접 나눌 필요가 없습니다. 문자열로 Path 객체를 만든 다음 stem 속성을 읽으세요. 이 속성은 파일 이름에 앞서 있는 점은 유지하고 마지막 접미사만 제거합니다.
아래 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from pathlib import Path
file_path = "Desktop/folder/myfile.txt"
file_name = Path(file_path).stem
print(file_name)
myfile
os.path.splitext()로 마지막 접미사 제거하기
표준 라이브러리 함수 os.path.splitext()는 마지막 접미사 앞의 경로 부분과 접미사를 한 쌍으로 반환합니다. 접미사를 버리려면 첫 번째 항목을 선택하세요. 마지막 경로 구성요소만 필요하다면 이 예제에서는 /로 나눌 수 있지만, 이 방법은 해당 구분자에 의존하므로 운영체제 간 이식성이 떨어집니다.
아래 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import os
file_path = "Desktop/folder/myfile.txt"
path_without_suffix = os.path.splitext(file_path)[0]
file_name = path_without_suffix.split("/")[-1]
print(file_name)
myfile
접미사를 제거하기 전에 기본 파일 이름 추출하기
경로를 고려하는 os.path 방식에서는 먼저 os.path.basename()을 호출해 마지막 구성요소를 가져온 다음, 그 결과를 os.path.splitext()에 전달합니다. Desktop/folder/myfile.txt의 기본 파일 이름은 myfile.txt이고, 마지막 접미사를 제거하면 myfile이 됩니다. 이 방식은 경로 구분자를 직접 선택할 필요가 없습니다.
아래 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import os
file_path = "Desktop/folder/myfile.txt"
basename = os.path.basename(file_path)
file_name = os.path.splitext(basename)[0]
print(file_name)
myfile
복합 접미사와 파일 이름의 점 처리하기
앞의 표준 방식은 점으로 구분된 부분을 모두 제거하는 것이 아니라 마지막 접미사 하나만 제거합니다. myfile.tar.gz에 Path.stem와 os.path.splitext()를 적용하면 둘 다 myfile.tar를 반환합니다. .gz만 접미사로 취급할 때는 적절한 결과입니다. 애플리케이션에서 .tar.gz 전체를 하나의 복합 접미사로 취급한다면 name.removesuffix(".tar.gz")처럼 해당 접미사를 명시적으로 처리하세요. str.removesuffix()는 Python 3.9에서 추가되었으므로 이 표현식은 Python 3.9 이상에서 사용할 수 있습니다. 이전 버전에서는 name[:-len(".tar.gz")] if name.endswith(".tar.gz") else name을 사용하면 해당 끝부분만 안전하게 제거할 수 있습니다.
README처럼 접미사가 없는 이름은 Path.stem와 os.path.splitext()를 사용해도 README 그대로 유지됩니다. .bashrc처럼 점으로 시작하는 이름은 접미사가 없는 점 파일로 처리됩니다. 따라서 Path(".bashrc").stem과 os.path.splitext(".bashrc")[0]은 모두 .bashrc를 반환합니다. 반면 archive.에는 끝에 점이 있습니다. Path.stem는 이를 archive.로 유지하지만, os.path.splitext()는 점을 접미사로 처리해 archive를 반환합니다.
첫 번째 점에서 나누면 동작이 달라져 이름의 나머지 부분이 잘려 나갑니다. my.file.tar.gz를 첫 번째 점에서 나누면 my가 되지만, 마지막 접미사만 제거하면 my.file.tar가 됩니다. 복합 접미사 전체를 제거할지, 마지막 접미사 하나만 제거할지, 첫 번째 점부터 끝까지 잘라낼지에 따라 방법을 선택하세요. 첫 번째 점에서 나누면 .bashrc도 빈 문자열이 되므로 점으로 시작하는 이름을 보존해야 할 때는 적합하지 않습니다.
아래 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from pathlib import Path
for name in ("myfile.tar.gz", "my.file.tar.gz"):
print(Path(name).stem)
print(name.split(".", 1)[0])
myfile.tar
myfile
my.file.tar
my