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 |
'코딩' 카테고리의 다른 글
[Python] Matplotlib 라이브러리 (0) | 2024.11.13 |
---|---|
[Python] Pandas 라이브러리 (0) | 2024.11.12 |
[Python] 파일 다루기 (txt, csv, with문, json) (0) | 2024.11.10 |
[Python] 프롬프트 사용 (가상환경, 라이브러리) (1) | 2024.11.09 |
[Python] 코드 단순화 (f-string, List Comprehension, Enumerate) (0) | 2024.11.08 |