AWS 실습을 하면서 이를 기록하기 위해 스크린샷을 많이 찍어두었는데
찍어두기만 하고 정리를 하지 못해서 골치였다.
맘먹고 파일 정리하려고 하나보니 1000개가 훌쩍 넘는 양에
일일히 손으로 할 수 없어 만들게 되었다.
프로그램을 만들면서 또 다른 오버헤드가 생기지 않도록 최소한의 기능으로 동작하게 작성하였다.
기능 목록
1. 시간 순서대로 채번하도록 하기.
2. 파일 이름의 공통적으로 들어갈 prefix와 postfix를 지정하도록 하기.
3. 폴더의 위치를 받아서 해당 폴더내의 파일에 대해 일괄 적용하기.
파라미터 받아오기
argparse 라이브러리를 사용하여 각각 폴더위치, 접두사, 접미사에 해당하는 dir_path, prefix, postfix의 값을 받아올수 있도록 했다.
import argparse
# example to use
# python3 chgfnm.py --dir_path ./ --prefix pic- --postfix -220318
parser = argparse.ArgumentParser('This will rename files')
parser.add_argument('--dir_path', '-d', metavar='<directory path>', type=str, nargs='?', default='./figures',
help='a target directory path, default is current directory ./')
parser.add_argument('--prefix', '-p', metavar='<prefix>', type=str, nargs='?', default='',
help='a prefix for specifying this files')
parser.add_argument('--postfix', metavar='<postfix>', type=str, nargs='?', default='',
help='a postfix for specifying this files')
args = parser.parse_args()
prefix = args.prefix
path = args.dir_path
postfix = args.postfix
python3 chgfnm.py --dir_path ./ --prefix pic- --postfix -220318
path, prefix, postfix에 각각 './' 'pic-' '-220318'이 들어가게 된다.
파일 가져와서 파일명 변경하기
glob 함수를 이용해서 폴더내의 파일을 가져와서 파일이 만들어진 시간순서로 정렬한후,
os.rename 함수를 이용해 파일명을 일괄 변경하였다.
os.rename 함수를 이용해 파일명을 일괄 변경하였다.
- 가져온 파일의 st_mtime 속성에는 만들어진 시간이 들어있다.
- '{0:03d}'.format( i ) 을 이용하면 001, 002, ...로 채번이 이루어진다.
def sorted_ls(path):
def mtime(f): return os.stat(os.path.join(f)).st_mtime
return list(sorted(glob.glob(path + '/*'), key=mtime))
for i, org_nm in enumerate(sorted_ls(path)):
dst_fnm = os.path.join(
path, prefix + '-' + '{0:03d}'.format(i) + postfix + '.png')
os.rename(org_nm, dst_fnm)
print(org_nm + ' => ' + dst_fnm)
전체 소스코드
import argparse
import os
import glob
parser = argparse.ArgumentParser('This will rename files')
parser.add_argument('--prefix', '-p', metavar='<prefix>', type=str, nargs='?', default='',
help='a prefix for specifying this files')
parser.add_argument('--dir_path', '-d', metavar='<directory path>', type=str, nargs='?', default='./figures',
help='a target directory path, default is current directory ./')
parser.add_argument('--postfix', metavar='<postfix>', type=str, nargs='?', default='',
help='a postfix for specifying this files')
args = parser.parse_args()
prefix = args.prefix
path = args.dir_path
postfix = args.postfix
def sorted_ls(path):
def mtime(f): return os.stat(os.path.join(f)).st_mtime
return list(sorted(glob.glob(path + '/*'), key=mtime))
for i, org_nm in enumerate(sorted_ls(path)):
dst_fnm = os.path.join(
path, prefix + '-' + '{0:03d}'.format(i) + postfix + '.png')
os.rename(org_nm, dst_fnm)
print(org_nm + ' => ' + dst_fnm)