본문 바로가기

코딩

[Python] 경로 (절대경로, 상대경로, os, pathlib, shutil)

1. 경로

파일 혹은 폴더의 경로는 크게 2가지 방법으로 나타낼 수 있다.

 

절대 경로 : 루트 디렉터리(Windows : "C:\", macOS : "/")부터 해당 파일까지의 전체 경로

상대 경로 : 작업 디렉터리(작업 파일이 속한 폴더)를 기준으로 나열된 경로

 

코드 파일을 다른 컴퓨터에 공유할 때, 절대 경로가 달라질 가능성이 매우 크므로 상대 경로를 주로 사용한다.

 

예시)
파일1 절대 경로 : C:\Users\Rampy\파일명1.py

파일2 절대 경로 : C:\Users\Rampy\파일명2.py

=> 파일명1.py 에서 파일명2.py의 상대경로 : "파일명2.py"

 

디렉터리폴더를 말하는 것으로, 대표적인 3개의 디렉터리는 간단하게 아래와 같이 표현한다.

대상 표현식
작업 디렉터리 (작업 파일이 속한 폴더) .
부모 디렉터리 (작업 디렉터리가 속한 폴더) ..
홈 디렉터리
( Windows : "C:\Users\{사용자명}"
  macOS : "/Users/{사용자명}" )
~

 

2. os 라이브러리

파일 경로를 다루는 라이브러리(파이썬에 내장됨)

 

os.chdir :

 

3. pathlib 라이브러리

파일 경로를 다루는 라이브러리(직접 설치 필요)로, \과 /을 신경쓰지 않아도 되어 편하다.

 

예시)

main.py 파일이 C:\Users\Name\rampy\main.py 경로에 위치

rampy 폴더 안에는 main.py, main2.py, test1.txt 3가지 파일이 존재

작업내용 코드 결과
import from pathlib import Path  
작업 디렉터리 절대경로 할당 p = Path.cwd() p = C:\Users\Name\rampy
홈 디렉터리 절대경로 할당 p = Path.home()) p = C:\Users\Name
작업 디렉터리 상대경로 할당 p = Path() p = .
상대경로를 절대경로로 반환 a = p.absolute() a = C:\Users\Name\rampy
홈 디렉터리 표기(~) 경로를
절대경로로 반환
a = Path("~\rampy")
b = a.expanduser()
b = C:\Users\Name\rampy
부모 디렉터리 표기(..) 등의 경로를
절대경로로 반환
a = Path("..")
b = a.resolve()
b = C:\Users\Name
에러 관련 강의자료 참
     
부모(바로 상위) 디렉터리
*p = Path.cwd() 인 경우
print(p.parent) C:\Users\Name
상위 디렉터리 시퀀스
(루트 디렉터리까지)
for x in p.parents:
    print(x)
C:\Users\Name
C:\Users
C:\
상위 #번째 디렉터리 print(p.parents[2]) C:\
마지막 경로 print(p.name) rampy
마지막 경로 파일의 확장자
*p = Path("main.py") 인 경우
print(p.suffix) .py
마지막 경로 파일의 파일명 (확장자 제외)
*p = Path("main.py") 인 경우
print(p.stem) main
     
상수에 저장된 경로 수정 (추가 연결) ① p = Path() / "test.txt"
② p /= "test.txt"
p = .\test.txt
경로가 디렉터리인지 확인 print(p.is_dir()) False
경로가 파일인지 확인 print(p.is_file()) True
경로 안의 모든 파일 탐색 k = Path.cwd()

if k.is_dir():
    for x in k.iterdir():
        print(x)
C:\Users\Name\rampy\main.py
C:\Users\Name\rampy\main2.py
C:\Users\Name\rampy\test1.txt
경로 안의 모든 파일 탐색 (재귀적)
*반환 : (경로, [경로 안 디렉터리들], [경로 안 파일들])
k = Path.cwd()

if k.is_dir():
    for x, y, z in k.walk():
        print(x, y, z)
아래 예제 코드 참고
     
#5일차 1번 ppt    
경로에 빈 파일 생성 p.touch()
*경로에 파일이 이미 존재하지 않는 경우
에러 관련 강의자료 참고
수정 시각을 현재로 변경 p.touch()
*경로에 파일이 이미 존재하는 경우
에러 관련 강의자료 참고
경로에 디렉터리 생성 p.mkdir() 에러 관련 강의자료 참고
경로의 파일/디렉터리 이름 변경 p.replace() 상세 코드 강의자료 참고
경로의 파일/디렉터리 경로 변경 p.replace() 상세 코드 강의자료 참고
경로의 파일 제거 p.unlink() 에러 관련 강의자료 참고
경로의 디렉터리 제거
(빈 디렉터리일 때)
p.rmdir() 에러 관련 강의자료 참고
#Example : Path의 walk 메서드 사용
from pathlib import Path

p = Path.cwd()

if p.is_dir():
    for x, y, z in p.walk():   #p.walk() 대신 os.walk(p) 써도 됨. 단, import os
    	print(x, y, z)

 

 

4. shutil 라이브러리

파일 복사와 삭제를 할 수 있는 라이브러리이다.

작업내용 코드 결과
파일 복사 from shutil import copyfile

p = Path("test.txt")
final = copyfile(p, "folder/" + p.name)
final : folder/test.txt
디렉터리 복사 from shutil import copytree

p = Path("folder")
final = copytree(p, "folder_two")
final : folder_two
디렉터리 제거 (비어있지 않아도 같이 삭제) from shutil import rmtree

rmtree(p)
p.exist() : False