Python

[Python] 파일 및 디렉토리 생성, 복사, 삭제, 이동(모듈 : os, shutil, glob)

balabala 2023. 5. 14. 21:54
728x90
SMALL

디렉토리 생성


os.mkdir() : 지정된 경로에 디렉토리를 생성.
os.makedirs() : 인자로 받은 경로에 디렉토리를 생성. 중간 경로에 해당하는 디렉토리가 존재하지 않으면, 필요한 모든 중간 디렉토리도 생성.
import os

if os.path.exists('package1'):  # 해당 경로에 파일이나 디렉토리의 존재 여부를 확인
    print('ok')     # 있으면 'ok' 출력
else:
    os.mkdir('package1')    # 없으면 디렉토리 생성

os.makedirs('package2/package3/package4') # 중간 디렉토리도 모두 생성

디렉토리 및 파일 복사


shutil.copy() : 파일을 복사하는 함수. 인자로 복사할 파일의 경로와 복사 대상 파일의 경로를 지정할 수 있다.
shutil.copytree() : 디렉토리와 그 하위 디렉토리 및 파일을 복사하는 함수. 디렉토리를 복사할 때는 shutil.copy() 함수보다 shutil.copytree() 함수를 사용해야 한다.
import shutil

shutil.copy('print.py', 'package1') # 파일 복사

shutil.copytree('testdir','package1/testdir') # 하위 디렉토리 및 파일 모두 복사
SMALL

디렉토리 및 파일 삭제


shutil.rmtree() : 인자로 받은 디렉토리를 재귀적으로 삭제하는 함수. 디렉토리 내부의 모든 파일과 서브디렉토리도 함께 삭제.
os.remove() : 파일을 삭제하는 함수. 함수의 인자로 파일 경로를 입력하면 해당 파일이 삭제된다.
import os
import shutil

shutil.rmtree('package2') # 디렉토리 내부의 모든 파일과 서브 디렉토리 삭제

os.remove('test1.txt') # 해당 파일 삭제

 


디렉토리 및 파일 이동


shutil.move() : 파일 또는 디렉토리를 다른 위치로 이동시키는 함수.
import shutil

shutil.move('print.py', 'package1/testdir') # 파일 해당 디렉토리로 이동

 


예제(+ glob.glob())


1. 사용자 입력으로 경로(path)를 받는다.
2. 해당 경로에 있는 모든 '.txt'파일 정보를 받는다.
3. '.txt' 파일의 이름 앞에 모두 마직막 파일 수정 날짜를 붙인다.(ex:2023-05-14_test1.txt)
4. newdir 이라는 디렉토리를 생성한다.
5. 수정된 '.txt'파일을 모두 newdir 디렉토리로 이동시킨다.
glob.glob() : 인자로 파일 경로 패턴을 받으며, 해당 패턴과 일치하는 모든 파일의 리스트를 반환. * 와 ? 와 같은 특수 문자를 사용하여 패턴을 지정.
import os
import datetime
import shutil
import glob

path = input('path:')   # 사용자 입력
os.chdir(path)          # 경로 이동

# 해당 경로에 'newdir' 디렉토리가 있는지 확인
if not os.path.exists('newdir'):
    os.mkdir('newdir')      # 없으면 디렉토리 생성

# os.walk() : 지정한 디렉토리와 그 하위 디렉토리를 순회하면서 모든 파일과 폴더에 대한 정보를 제공.
for dirpath, dirnames, files in os.walk('./'):
    for file in os.scandir(dirpath):
        if file.name.endswith('.txt'):  # 문자열 끝이 '.txt'로 끝나는지 여부 검사
            tm = datetime.datetime.fromtimestamp(file.stat().st_mtime)
            new_file = str(tm.year) + '-' + str(tm.month) + '-' + str(tm.day) + '-' + file.name
            os.rename(dirpath + '/' + file.name, new_file)  # 파일 이름 변경

file_ls = glob.glob('*.txt')    # 모든 .txt 파일의 리스트
for name in file_ls:
    shutil.move(name, 'newdir/')    # 파일 이동
print('over!!')
728x90
LIST