프로그래밍/Python

[Python] 파일 확장자 분리하기

채윤아빠 2022. 1. 9. 13:23
728x90
반응형

파이썬에서 파일 확장자를 분리하려면, os.path.splitext() 함수를 이용하면 됩니다.

splitext() 함수를 이용하는 방법은 다음과 같습니다.

from os.path import splitext

print(f"{splitext('bar')=}")
print(f"{splitext('foo.bar.exe')=}")
print(f"{splitext('/foo/bar.exe')=}")
print(f"{splitext('.cshrc')=}")
print(f"{splitext('/foo/....jepg')=}")
print(f"{splitext('/foo/...a.jepg')=}")
print(f"{splitext('/foo/...a....jepg')=}")
print(f"{splitext('/foo/a....jepg')=}")
print(f"{splitext('')=}")
print(f"{splitext(None)=}")

실행한 결과는 다음과 같습니다.

splitext('bar')=('bar', '')
splitext('foo.bar.exe')=('foo.bar', '.exe')
splitext('/foo/bar.exe')=('/foo/bar', '.exe')
splitext('.cshrc')=('.cshrc', '')
splitext('/foo/....jepg')=('/foo/....jepg', '')
splitext('/foo/...a.jepg')=('/foo/...a', '.jepg')
splitext('/foo/...a....jepg')=('/foo/...a...', '.jepg')
splitext('/foo/a....jepg')=('/foo/a...', '.jepg')
splitext('')=('', '')
Traceback (most recent call last):
  File "D:\Dev\Python\python-test\general\os\split_ext.py", line 16, in 
    print(f"{splitext(None)=}")
  File "C:\Dev\Python\Python310\lib\ntpath.py", line 230, in splitext
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

위 결과에서 보이는 바와 같이, splitext() 함수는 확장자와 그 외 부분을 분리해 주는 함수입니다.

폴더 경로가 포함되어 있다고 파일 이름만 따로 분리하지 않습니다.
경로가 포함된 것이 첫 번째 항목에 들어가고, 분리된 확장자가 두 번째 항목에 들어갑니다.
그래서 결과가 2개의 항목을 갖는 tuple로 반환됩니다.

또한 확장자 분리에 주의해서 보셔야할 부분이 "...." 등으로 이루어진 파일명들로
".....ext"인 파일명은 확장자가 별도로 분리되지 못하고, "....ㅁ.ext" 과 같이 파일명에 확장자 구분용 "." 문자 앞에 "." 이외의 문자가 있어야만 확장자로 분리가 됩니다.

마지막으로 None을 입력하면 "TypeError"가 발생하니 주의가 필요합니다.


참고자료

"os.path — 일반적인 경로명 조작":https://docs.python.org/ko/3/library/os.path.html