Python으로 파일명을 효율적으로 가져오는 방법 | os 모듈과 pathlib 모듈 완전 분석

1. 시작하기

Python은 파일 작업에 대해 매우 유연하며, 간단한 코드로 많은 작업을 자동화할 수 있습니다. 이 기사에서는 Python을 사용하여 “파일 이름을 가져오는” 방법을 몇 가지 소개합니다. 특히, 표준 라이브러리인 os 모듈과 pathlib 모듈을 중심으로 설명합니다. 이 기사를 읽으면 디렉터리 내 파일을 효율적으로 조작하고, 파일 이름을 가져오거나 필터링하는 스크립트를 만드는 기술을 습득할 수 있을 것입니다.

2. Python에서 파일명 가져오기 방법의 기본

먼저, Python에서 파일명을 가져오기 위한 기본적인 방법부터 시작합니다. os.path.basename() 함수를 사용하면 지정한 경로에서 파일명을 가져올 수 있습니다.

2.1 os.path.basename() 사용법

os.path.basename()는 전체 경로에서 파일명만을 가져오는 함수입니다. 아래 예에서는 파일 경로에서 파일명을 추출합니다.
import os

file_path = "/user/home/document/file.txt"
file_name = os.path.basename(file_path)
print(file_name)  # 결과: "file.txt"

2.2 os.path.dirname()로 디렉터리명 가져오기

마찬가지로, os.path.dirname()를 사용하면 파일 경로에서 디렉터리명을 가져올 수 있습니다. 이를 통해 파일명과 디렉터리명을 분리하여 가져올 수 있습니다.
dir_name = os.path.dirname(file_path)
print(dir_name)  # 결과: "/user/home/document"
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. 디렉터리 내의 모든 파일 이름을 가져오기

디렉터리 내에 있는 모든 파일과 폴더를 리스트 형태로 가져오려면 os.listdir()가 편리합니다. 또한, 서브디렉터리 내의 파일을 재귀적으로 가져오기 위해서는 os.walk()가 도움이 됩니다.

3.1 os.listdir()를 사용한 파일 이름 가져오기

os.listdir()를 사용하면 지정한 디렉터리 내의 모든 파일과 폴더를 리스트로 가져올 수 있습니다. 단순한 디렉터리 작업에 최적입니다.
import os

dir_path = "/user/home/document"
files = os.listdir(dir_path)
print(files)  # 결과: ["file1.txt", "file2.txt", "subfolder"]

3.2 os.walk()로 재귀적으로 파일 이름을 가져오기

서브디렉터리까지 포함해 파일을 재귀적으로 가져오고 싶을 경우, os.walk()를 사용하는 것이 가장 효과적입니다. 아래 코드에서는 지정된 디렉터리와 그 서브디렉터리에 존재하는 모든 파일을 목록으로 표시합니다.
import os

dir_path = "/user/home/document"
for root, dirs, files in os.walk(dir_path):
    for file in files:
        print(os.path.join(root, file))

3.3 오류 처리 추가

디렉터리가 존재하지 않거나 접근 권한이 없는 경우 오류가 발생할 가능성이 있습니다. 따라서 try-except를 사용해 예외 처리를 추가하는 것이 권장됩니다.
dir_path = "/invalid/path"
try:
    files = os.listdir(dir_path)
    print(files)
except FileNotFoundError:
    print(f"{dir_path}를 찾을 수 없습니다.")

4. 확장자 가져오기 및 변경

파일명을 가져올 때, 확장자 작업도 필요할 경우가 있습니다.os.path.splitext()를 사용하면, 확장자를 분리하거나 변경할 수 있습니다.

4.1 os.path.splitext()로 확장자 가져오기

os.path.splitext()는 파일명과 확장자를 나누어 반환하는 함수입니다.
import os

file_path = "/user/home/document/file.txt"
file_name, file_ext = os.path.splitext(file_path)
print(file_name)  # 결과: "/user/home/document/file"
print(file_ext)   # 결과: ".txt"

4.2 확장자 변경하기

확장자를 변경할 때는, os.path.splitext()로 가져온 파일명에 새로운 확장자를 추가합니다.
new_file_path = file_name + ".jpg"
print(new_file_path)  # 결과: "/user/home/document/file.jpg"
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. pathlib 모듈을 사용한 파일명 가져오기 응용

Python 3.4 이후에서는 pathlib 모듈이 파일 경로 조작에 매우 편리합니다. pathlib은 객체 지향 방식으로 파일 경로를 조작할 수 있어, 보다 직관적으로 사용할 수 있습니다.

5.1 Path.iterdir()를 사용한 파일명 가져오기

pathlib.Path()iterdir() 메서드를 사용하면, 지정한 디렉터리 내의 파일명과 폴더명을 가져올 수 있습니다.
from pathlib import Path

dir_path = Path("/user/home/document")
for item in dir_path.iterdir():
    print(item.name)

5.2 재귀적인 파일 가져오기: rglob()

하위 디렉터리까지 포함해 재귀적으로 파일명을 가져오는 경우에는 rglob() 메서드를 사용합니다. 이는 os.walk()의 대안으로도 활용할 수 있습니다.
for file in dir_path.rglob("*"):
    print(file)

6. 파일명 필터링

특정 조건에 맞는 파일명만 가져오고 싶을 경우,glob모듈이나pathlibglob() 메서드를 사용하여 필터링할 수 있습니다.

6.1 확장자로 필터링

특정 확장자를 가진 파일만 가져오려면, 와일드카드*를 사용합니다.
from pathlib import Path

dir_path = Path("/user/home/document")
for file in dir_path.glob("*.txt"):
    print(file)
이 코드는 지정한 디렉터리 내의 .txt 파일만 가져옵니다.

7. 요약

Python을 사용하여 파일 이름을 얻는 방법은 다양하지만, 용도에 맞는 적절한 방법을 선택하는 것이 중요합니다. os 모듈의 기본적인 조작부터, pathlib의 고급 기능까지 활용하면, 디렉터리 내의 파일을 효율적으로 처리할 수 있습니다. 다음 번에는 파일 작업의 응용으로, 파일 이름 바꾸기와 이동, 삭제에 관한 정보를 제공할 것입니다.