Please Enable JavaScript!
Gon[ Enable JavaScript ]

파이썬 Python 파일 경로 다루기

파이썬 Python
반응형

파이썬에서 파일 경로를 다룰 때는 os 모듈과 pathlib 모듈을 주로 사용합니다. 이들 모듈은 운영체제에 독립적으로 경로를 관리하며, 파일 및 디렉터리의 작업을 쉽게 수행할 수 있도록 다양한 함수와 메서드를 제공합니다.

 


1. os 모듈을 사용한 경로 다루기

os.path 하위 모듈을 사용하면 파일 경로 관련 작업을 수행할 수 있습니다.

🔹 파일 경로 결합: os.path.join()

import os

# 폴더 경로와 파일명을 결합하여 경로 생성
folder_path = "/home/user/documents"
file_name = "example.txt"
full_path = os.path.join(folder_path, file_name)
print(full_path)  # 결과: /home/user/documents/example.txt

설명: os.path.join()은 폴더 경로와 파일명을 결합하여 전체 경로를 생성하며, 운영체제에 맞는 경로 구분자(/ 또는 \\\\)를 자동으로 사용합니다.

🔹 파일 및 디렉터리 존재 여부 확인: os.path.exists()

file_path = "/home/user/documents/example.txt"
if os.path.exists(file_path):
    print("파일 또는 디렉터리가 존재합니다.")
else:
    print("존재하지 않습니다.")

설명: os.path.exists()는 경로에 해당하는 파일 또는 디렉터리가 존재하는지 확인하고, 결과를 True 또는 False로 반환합니다.

🔹 파일과 디렉터리 구분: os.path.isfile() / os.path.isdir()

# 파일 확인
print(os.path.isfile(file_path))  # 파일일 경우 True

# 디렉터리 확인
print(os.path.isdir(file_path))   # 디렉터리일 경우 True

설명: os.path.isfile()은 해당 경로가 파일인지 확인하고, os.path.isdir()은 디렉터리인지 확인합니다.

🔹 파일명과 확장자 분리: os.path.splitext()

file_path = "/home/user/documents/example.txt"
file_name, file_extension = os.path.splitext(file_path)
print(file_name)      # 결과: /home/user/documents/example
print(file_extension) # 결과: .txt

설명: os.path.splitext()는 파일 경로에서 파일명과 확장자를 분리하여 반환합니다.


2. pathlib 모듈을 사용한 경로 다루기 (Python 3.4+)

pathlib 모듈은 객체 지향 방식을 사용하여 파일 경로를 쉽게 관리할 수 있는 기능을 제공합니다. 파이썬 3.4 이후 버전에서 사용할 수 있습니다.

🔹 Path 객체 생성

from pathlib import Path

# 경로 객체 생성
path = Path("/home/user/documents/example.txt")
print(path)

설명: Path 객체는 파일 경로를 쉽게 다룰 수 있는 많은 메서드와 속성을 포함합니다.

🔹 파일 경로 결합

/ 연산자를 사용하여 경로를 결합할 수 있습니다.

from pathlib import Path

folder_path = Path("/home/user/documents")
file_name = "example.txt"
full_path = folder_path / file_name
print(full_path)  # 결과: /home/user/documents/example.txt

설명: Path 객체는 / 연산자를 사용해 직관적으로 파일 경로를 결합할 수 있습니다.

🔹 파일 및 디렉터리 존재 여부 확인

# 파일 존재 확인
if full_path.exists():
    print("파일 또는 디렉터리가 존재합니다.")
else:
    print("존재하지 않습니다.")

설명: exists() 메서드는 파일 또는 디렉터리의 존재 여부를 확인합니다.

🔹 파일과 디렉터리 구분

print(full_path.is_file())  # 파일일 경우 True
print(full_path.is_dir())   # 디렉터리일 경우 True

설명: is_file()은 파일인지 확인하고, is_dir()은 디렉터리인지 확인합니다.

🔹 파일명과 확장자 추출

print(full_path.stem)       # 결과: example
print(full_path.suffix)     # 결과: .txt
print(full_path.name)       # 결과: example.txt

설명: stem은 파일명만, suffix는 확장자만, name은 전체 파일명을 반환합니다.


3. 디렉터리 및 파일 생성과 삭제

🔹 디렉터리 생성: mkdir()

mkdir() 메서드는 새로운 디렉터리를 생성하며, parents=True 옵션을 사용하면 상위 폴더도 함께 생성할 수 있습니다.

# pathlib 사용 예제
from pathlib import Path

new_folder = Path("/home/user/new_folder")
new_folder.mkdir(parents=True, exist_ok=True)

설명: mkdir(parents=True, exist_ok=True)는 상위 폴더가 없어도 생성하며, 이미 디렉터리가 있으면 오류 없이 넘어갑니다.

🔹 파일 생성과 삭제

  • 파일 생성: Path.touch()
  • 파일 삭제: Path.unlink()
# 파일 생성
file_path = Path("/home/user/new_folder/new_file.txt")
file_path.touch()

# 파일 삭제
file_path.unlink()

설명: touch() 메서드는 새 파일을 생성하며, unlink()는 파일을 삭제합니다.


4. 파일 경로 정보 가져오기

🔹 부모 디렉터리와 최상위 디렉터리

print(full_path.parent)    # 상위 디렉터리 경로
print(full_path.parents[1])  # 두 단계 상위 디렉터리

설명: parent는 상위 폴더 경로를 반환하며, parents는 단계별 상위 폴더에 접근할 수 있는 리스트를 반환합니다.

🔹 경로 절대 경로로 변환: resolve()

상대 경로를 절대 경로로 변환하려면 resolve() 메서드를 사용합니다.

relative_path = Path("example.txt")
absolute_path = relative_path.resolve()
print(absolute_path)

설명: resolve()는 경로를 절대 경로로 변환하여 반환합니다.


5. 디렉터리 내 파일 목록 확인

🔹 특정 폴더 내 파일 목록 가져오기: glob()와 rglob()

  • glob(): 현재 디렉터리에서 패턴과 일치하는 파일을 찾습니다.
  • rglob(): 하위 디렉터리까지 모든 파일을 찾습니다.
# 모든 .txt 파일 찾기 (현재 디렉터리)
for txt_file in Path("/home/user/documents").glob("*.txt"):
    print(txt_file)

# 모든 하위 폴더 포함하여 .txt 파일 찾기
for txt_file in Path("/home/user/documents").rglob("*.txt"):
    print(txt_file)

설명: glob("*.txt")는 현재 디렉터리에서 모든 .txt 파일을 찾고, rglob("*.txt")는 하위 디렉터리까지 모든 .txt 파일을 찾습니다.


요약

  • os와 pathlib는 파일 경로를 다룰 때 사용되며, pathlib는 객체 지향적이고 직관적인 방식으로 파일 경로를 관리할 수 있습니다.
  • 경로 결합, 파일 및 디렉터리 존재 여부 확인, 파일명과 확장자 분리 등 다양한 경로 작업을 쉽게 수행할 수 있습니다.
  • mkdir(), touch(), unlink() 메서드를 통해 디렉터리 생성 및 파일 생성과 삭제가 가능합니다.
  • glob()와 rglob()는 특정 패턴을 가진 파일을 검색할 때 유용하게 사용됩니다.

이렇게 파이썬에서 제공하는 파일 경로 관련 도구들을 활용하면 운영체제에 구애받지 않고 파일 경로를 다루는 코드를 작성할 수 있습니다.

반응형
Posted by 녹두장군1
,