반응형
핸드폰으로 촬영한 영상 파일이나, 기타 영상 파일들이 내 컴퓨터에 일일이 폴더별로 잘(?) 정리가 되어 있을 때가 있습니다.
그런데...
다시 한군데로 모아서 정리하려니, 일일이 폴더를 들어 갔다가 나와야 하는 불편함이 있네요...ㅡㅡ;a
그래서 다른 능력자 분들의 코드를 모아서 조합을 해 봤습니다.
아래 코드를 참조하시기 바랍니다.
import os
# 셸 유틸리티는 파일 및 디렉터리 작업을 수행하는 데 사용할 모듈의 이름
import shutil
# BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# 다운로드 받은 동영상 파일이 있는 최상위 폴더
inputdirpath = "D:\\movie"
# 한군데 폴더로 옮기고 싶은 위치
savedir = inputdirpath + '\\' + "mp4"
# 혹여나, 파일을 옮기고 싶지 않은 폴더가 있다면 정의
exceptfolder1 = 'D:\\movie\\mp4'
exceptfolder2 = 'D:\\movie\\keep'
exceptfolder3 = 'D:\\movie\\temp'
# 폴더가 없다면 만들어서 사용하기
def makedir(dirname):
if not os.path.exists(dirname):
os.makedirs(dirname)
print('made sub-dir')
# 폴더를 계속 검색하면서 반복하게 된다.
def searchdir(dirname):
try:
# 전체 폴더 목록을 가져온다.
filenames = os.listdir(dirname)
# 폴더 목록에서 한개씩 폴더 경로를 가져온다.
for filename in filenames:
# 전체 경로를 가져온다.
full_filename = os.path.join(dirname, filename)
# if dirname == savedir and dirname == exceptfolder1 and dirname == exceptfolder2:
# continue
# 폴더가 맞는지 확인
if os.path.isdir(full_filename):
# 폴더 안에 또 폴더가 있다면 다시 검색 함수 호출
searchdir(full_filename)
# 삭제 제외 목록이 아니면 폴더 삭제
if full_filename != savedir and full_filename != exceptfolder1 and full_filename != exceptfolder2 and full_filename != exceptfolder3:
shutil.rmtree(full_filename) # 폴더 삭제
print("Delete folder", full_filename)
# else:
# 폴더가 제외할 목록이 아니면 파일 이동 / 삭제 / 확인을 수행
elif dirname != savedir and dirname != exceptfolder1 and dirname != exceptfolder2 and full_filename != exceptfolder3:
# 파일 이름과 확장자를 분리해서 확인
ext = os.path.splitext(full_filename)[-1]
name = os.path.basename(full_filename)
# print(full_filename)
# 동영상용 파일 이라면...
if ext == '.mp4' or ext == '.mkv' or ext == '.avi' or ext == '.wmv':
print('find >> ' + full_filename)
# 화질이 좋은 동영상을 분류하기 위해...
# 만일 파일 사이즈가 저용량 이라면 삭제 / 폴더도 삭제
if os.path.getsize(full_filename) < (1024*1024*300):
# 저용량 파일 삭제
if os.path.isfile(full_filename):
os.remove(full_filename) # 파일 삭제
print("delete >>", full_filename)
# shutil.rmtree(dirname) # 폴더 삭제
# print("Delete folder", dirname)
else:
# 파일 사이즈가 고용량이면 지정 폴더로 이동
shutil.move(full_filename, savedir + '\\' + name)
print('move << ' + savedir + '\\' + name)
else:
os.remove(full_filename)
except PermissionError:
pass
# 프로그램 완료
def finish():
print('complete')
# 순차적으로 프로그램 수행
if __name__ == "__main__":
print('main program')
makedir(savedir)
searchdir(inputdirpath)
finish()
# 참고 사이트
# http://flowerykeyboard.tistory.com/6
# https://code.i-harness.com/ko-kr/q/3c7f09
# 파이썬 조각 코드 모음집 : https://wikidocs.net/book/536
'Program > Python' 카테고리의 다른 글
conda + jupyter lab installation[콘다 + 주피터랩 설치 환경] (0) | 2022.09.11 |
---|---|
파이썬 리스트 List (0) | 2019.11.26 |
파이썬(python) - for in 반복문 (0) | 2019.07.18 |