HOWTO · Python

Python의 경로에서 파일 이름을 얻는 방법

이 튜토리얼에서는 os.path.split(), os.path.basename(), ntpath.basename(), pathlib.Path.name 등 Python에서 파일 경로에서 파일 이름을 추출하는 다양한 방법을 보여줍니다.

이 페이지의 내용

프로그래밍에서는 주어진 파일 경로에서 파일 이름을 추출해야 하는 경우가 많습니다. C:\Documents\Project\file.txt와 같은 파일 경로가 있고 파일 이름인 file.txt만 추출해야 하는 상황을 생각해 보세요. 이는 파일 관리, 데이터 분석, 웹 개발에서 일상적인 작업이며, Python은 이를 수행하는 여러 가지 방법을 제공합니다.

이 튜토리얼에서는 Python에서 경로에서 파일 이름을 가져오는 네 가지 방법인 os.path.split(), os.path.basename(), ntpath.basename(), pathlib.Path.name을 소개합니다. 이들은 주로 파일 이름 외에 무엇을 더 제공하는지, 그리고 코드를 실행하는 운영 체제와 다른 운영 체제를 위해 작성된 경로를 어떻게 처리하는지에서 차이가 납니다.

os.path.split() 함수를 사용하여 Python에서 경로에서 파일 이름 가져오기

os.path.split() 함수는 파일 경로를 디렉터리와 파일 이름 구성 요소로 나누므로 파일 이름 부분만 가져올 수도 있고, 디렉터리도 필요하면 두 부분을 모두 유지할 수도 있습니다.

구문:

import os

directory, filename = os.path.split(path)

매개변수: os.path.split() 함수는 단일 매개변수를 받습니다.

  • path: 이 매개변수는 파일 이름을 추출하려는 파일 경로를 나타냅니다. 파일의 절대 경로나 상대 경로를 포함하는 문자열일 수 있습니다.

반환 값: 이 함수는 두 개의 요소를 포함하는 튜플을 반환합니다.

  • directory: 이 변수는 파일 이름을 제외한 경로의 디렉터리 구성 요소를 담습니다.

  • filename: 이 변수는 경로에서 추출된 파일 이름을 담습니다.

다음 코드 조각은 os.path.split() 함수를 사용하여 Python에서 경로에서 파일 이름을 가져오는 방법을 보여줍니다.

import os

directory, filename = os.path.split("MyFolder/MySubFolder/MyFile.txt")
print(directory)
print(filename)

출력:

MyFolder/MySubFolder
MyFile.txt

변수 directory에는 파일 경로의 디렉터리 구성 요소인 MyFolder/MySubFolder가, 변수 filename에는 추출된 파일 이름 MyFile.txt가 들어갑니다. 두 부분이 모두 필요할 때 이 방법을 사용하세요. 파일 이름만 필요하면 다음 방법이 더 짧습니다.

os.path.basename() 함수를 사용하여 Python에서 경로에서 파일 이름 가져오기

os.path.basename() 함수는 경로의 마지막 구성 요소를 반환하는데, 이는 보통 파일 이름입니다. 이 함수는 os.path 모듈의 일부이며, 그 구분자 규칙은 코드가 실행되는 운영 체제를 따릅니다.

구문:

import os

filename = os.path.basename(path)

매개변수: os.path.basename() 함수는 단일 매개변수를 받습니다.

  • path: 이 매개변수는 파일 이름을 추출하려는 파일 경로를 나타냅니다. 파일의 절대 경로나 상대 경로를 포함하는 문자열일 수 있습니다.

반환 값: 이 함수는 주어진 경로에서 추출된 파일 이름을 나타내는 문자열을 반환합니다.

os.path.basename()과 os.path.split() 모두 경로에서 파일 이름을 추출할 수 있지만, os.path.basename()은 파일 이름 구성 요소에만 집중하여 문자열로 반환하므로 디렉터리 부분이 필요 없을 때 더 직관적인 선택입니다.

import os

filename = os.path.basename("MyFolder/MySubFolder/MyFile.txt")
print(filename)

출력:

MyFile.txt

결과인 파일 이름 MyFile.txt가 변수 filename에 할당되고 출력됩니다.

ntpath 라이브러리를 사용하여 Python에서 경로에서 파일 이름 가져오기

Python의 ntpath 모듈은 코드가 실제로 어떤 시스템에서 실행되든 Windows 경로를 위한 경로 조작을 구현합니다. 이는 Linux나 macOS 컴퓨터에서 Windows 스타일 경로를 처리해야 할 때 중요합니다. 그런 환경에서는 os.path.basename()이 백슬래시를 구분자로 취급하지 않으므로 os.path.basename("MyFolder\\MySubFolder\\MyFile.txt")는 문자열 전체를 반환하지만, ntpath.basename()은 파일 이름을 반환합니다.

구문:

import ntpath

filename = ntpath.basename(path)

매개변수: ntpath.basename() 함수는 단일 매개변수를 받습니다.

  • path: 이 매개변수는 파일 이름을 추출하려는 파일 경로를 나타냅니다. 파일의 절대 경로나 상대 경로를 포함하는 문자열일 수 있습니다.

반환 값: 이 함수는 주어진 경로에서 추출된 파일 이름을 나타내는 문자열을 반환합니다.

다음 코드 조각은 ntpath.basename() 함수를 사용하여 Python에서 Windows 경로에서 파일 이름을 가져오는 방법을 보여줍니다.

import ntpath

filename = ntpath.basename("MyFolder\\MySubFolder\\MyFile.txt")
print(filename)

출력:

MyFile.txt

처리하는 경로가 Windows 경로이지만 코드가 어디에서든 실행될 수 있을 때 ntpath를 사용하세요. Windows 컴퓨터에서는 os.path가 이미 같은 규칙을 따르므로 둘은 동일하게 동작합니다.

pathlib 모듈을 사용하여 Python에서 경로에서 파일 이름 가져오기

pathlib 모듈은 파일 경로를 다루는 객체 지향 접근 방식을 제공합니다. 그 Path 클래스는 경로 관련 작업을 캡슐화하며, 파일 이름은 Path 객체의 .name 속성으로 직접 사용할 수 있습니다.

from pathlib import Path

filename = Path("MyFolder/MySubFolder/MyFile.txt").name
print(filename)

출력:

MyFile.txt

.name 외에도 같은 객체에서 상위 디렉터리(.parent), 확장자(.suffix), 확장자가 없는 파일 이름(.stem)을 얻을 수 있어, 파일 이름 이상의 것이 필요할 때 pathlib가 편리한 선택이 됩니다.

결론

Python에서 파일 경로에서 파일 이름을 추출하는 네 가지 서로 다른 방법인 os.path.split(), os.path.basename(), ntpath.basename(), pathlib.Path.name을 살펴보았습니다. 각 방법에는 장단점이 있어 다양한 상황에 적합합니다.

os.path.split() 메서드는 경로를 디렉터리와 파일 이름 구성 요소로 나눌 수 있습니다. 이러한 세분성 덕분에 경로를 더 세밀하게 제어할 수 있지만 파일 이름만 접근하려면 추가 코드가 필요합니다. 하지만 다양한 운영 체제에서 동작하므로 다용도입니다.

반면 os.path.basename()은 경로에서 파일 이름을 직접 추출하는 더 간단한 접근 방식을 제공합니다. 다양한 플랫폼과 호환되며 직관적인 솔루션을 제공합니다. 하지만 파일 이름을 문자열로만 반환합니다.

Windows 전용 경로의 경우 ntpath.basename()은 모든 운영 체제에서 이러한 경로를 처리하도록 설계되었습니다. 추가 코드 없이 파일 이름을 직접 추출합니다. 하지만 Windows 경로로 제한되며 크로스 플랫폼 호환성이 없습니다.

마지막으로 pathlib.Path.name은 경로를 다루는 객체 지향 접근 방식을 제공합니다. 추가적인 경로 조작이 가능하고 다른 pathlib 기능과 잘 통합됩니다. 하지만 단순한 파일 이름 추출에는 약간의 복잡성이 추가되고 pathlib 모듈을 임포트해야 합니다.