본문 바로가기
IT/파이썬 기초 (Python)

#029 파이썬 기초 - 문제 해결 Part 2

by DoitSQL 2023. 3. 12.
728x90

Python기초강의강좌, 파이썬기초강의강좌, Python백업프로그램

#029 파이썬 기초 - 문제 해결 Part 2

문제 해결 Part 2

첫 번째로 만든 프로그램은 일단 잘 동작합니다. 그러나, 프로그램을 매일매일 잘 쓰기 위해 좀 더 개선의 여지가 있습니다. 이 단계를 소프트웨어의 유지보수(maintenance) 단계라고 합니다.

 

첫 번째 프로그램을 안 보신 분은 이전 포스팅을 먼저 보고 오세요.

2023.03.10 - [파이썬 기초 (Python)] - #028 파이썬 기초 - 문제 해결 Part 1

 


두 번째 프로그램

저번 시간에 만든 프로그램을 좀 더 개선해 보겠습니다. 주 백업 directory에 일자로 된 하위 directory를 만들고 시간으로 된 압축 파일들을 그 안에 넣는 방식으로 변경해 보겠습니다. 이렇게 해서 좀 더 계층적으로 저장되므로 좀 더 쉽게 관리할 수 있을 것입니다. 또한, 파일명도 좀 더 짧아집니다. 마지막으로 각각 directory에 백업 파일이 나뉘어 저장되므로 어떤 날에 백업을 했는지 여부를 그 날짜에 해당하는 directory가 있는지 여부만으로 쉽게 확 인할 수 있을 것입니다.

 

backup_ver2.py로 저장하세요: (기존 프로그램을 save as로 저장하고 변경하십시오.)   

# Filename : backup_ver2.py
# -*- coding:utf-8 -*-
import os
import time

# source 디렉토리 # E:\python_study
# 각자의 프로그램 소스 디렉토리를 지정하면 됩니다.
source = r'E:\python_study'

# backup 디렉토리 # E:\backup
# 각자의 프로그램 백업 디렉토리를 지정하면 됩니다.
# 백업 디렉토리는 미리 생성해 두어야 합니다.
target_dir = r'E:\backup'

# 추가 : backup directory가 없으면 생성해 준다.
if not os.path.exists(target_dir):
    os.mkdir(target_dir)     # make directory

# 추가 : sub directory 용 변수
today = target_dir + os.sep + time.strftime('%Y%m%d')

# 추가 : zip 파일명
now = time.strftime('%H%M%S')

# 변경 : 파일명 구성
# target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
target = today + os.sep + now + '.zip'

# 추가 : sub directory 확인 후 생성
if not os.path.exists(today):
    os.mkdir(today)
    print('Successfully created directory', today)

# 타겟 확인
print(target)

# cmd 명령 구성 ( bz c [타겟] [소스] 형태로 구성 )
cmd = 'bz c '
cmd += target + ' '
cmd += source

# cmd 명령 확인
print(cmd)

# 백업 압축실행
os.system(cmd)

# 종료
if os.system(cmd) == 0:
    print('Successful backup to', target)
else:
    print('Backup FAILED')

▶ 실행 결과 :

C:\Anaconda\envs\study_39\python.exe E:\python_study\backup_ver2.py
E:\backup\20230301\191731.zip
bz c E:\backup\20230301\191731.zip E:\python_study
bz 7.30(Beta,x64) - Bandizip console tool. Copyright(C) 2022 Bandisoft
Creating archive: E:\backup\20230301\191731.zip
Compressing: python_study/.idea/.gitignore
Compressing: python_study/.idea/inspectionProfiles/profiles_settings.xml
Compressing: python_study/.idea/misc.xml
Compressing: python_study/.idea/modules.xml
Compressing: python_study/.idea/python_study.iml
Compressing: python_study/.idea/workspace.xml
Compressing: python_study/.ipynb_checkpoints/hello-checkpoint.ipynb
Compressing: python_study/.ipynb_checkpoints/Untitled-checkpoint.ipynb
Compressing: python_study/__pycache__/module_using_name.cpython-39.pyc
Compressing: python_study/__pycache__/module_using_sys.cpython-39.pyc
Compressing: python_study/__pycache__/mymodule.cpython-39.pyc
Compressing: python_study/backup_ver1.py
Compressing: python_study/backup_ver2.py
Compressing: python_study/break.py
Compressing: python_study/continue.py
Compressing: python_study/ds_reference.py
Compressing: python_study/ds_seq.py
Compressing: python_study/ds_str_methods.py
Compressing: python_study/ds_using_list.py
Compressing: python_study/ds_using_tuple.py
Compressing: python_study/expression.py
Compressing: python_study/for.py
Compressing: python_study/function1.py
Compressing: python_study/function_default.py
Compressing: python_study/function_docstring.py
Compressing: python_study/function_global.py
Compressing: python_study/function_keyword.py
Compressing: python_study/function_local.py
Compressing: python_study/function_param.py
Compressing: python_study/function_return.py
Compressing: python_study/function_varargs.py
Compressing: python_study/hello.ipynb
Compressing: python_study/hello.py
Compressing: python_study/if.py
Compressing: python_study/main.py
Compressing: python_study/module_using_name.py
Compressing: python_study/module_using_name_import.py
Compressing: python_study/module_using_sys.py
Compressing: python_study/mymodule.py
Compressing: python_study/mymodule_demo.py
Compressing: python_study/mymodule_demo2.py
Compressing: python_study/pyc_compile.py
Compressing: python_study/str_format.py
Compressing: python_study/var.py
Compressing: python_study/while.py
bz 7.30(Beta,x64) - Bandizip console tool. Copyright(C) 2022 Bandisoft
Creating archive: E:\backup\20230301\191731.zip
Compressing: python_study/.idea/.gitignore
Compressing: python_study/.idea/inspectionProfiles/profiles_settings.xml
Compressing: python_study/.idea/misc.xml
Compressing: python_study/.idea/modules.xml
Compressing: python_study/.idea/python_study.iml
Compressing: python_study/.idea/workspace.xml
Compressing: python_study/.ipynb_checkpoints/hello-checkpoint.ipynb
Compressing: python_study/.ipynb_checkpoints/Untitled-checkpoint.ipynb
Compressing: python_study/__pycache__/module_using_name.cpython-39.pyc
Compressing: python_study/__pycache__/module_using_sys.cpython-39.pyc
Compressing: python_study/__pycache__/mymodule.cpython-39.pyc
Compressing: python_study/backup_ver1.py
Compressing: python_study/backup_ver2.py
Compressing: python_study/break.py
Compressing: python_study/continue.py
Compressing: python_study/ds_reference.py
Compressing: python_study/ds_seq.py
Compressing: python_study/ds_str_methods.py
Compressing: python_study/ds_using_list.py
Compressing: python_study/ds_using_tuple.py
Compressing: python_study/expression.py
Compressing: python_study/for.py
Compressing: python_study/function1.py
Compressing: python_study/function_default.py
Compressing: python_study/function_docstring.py
Compressing: python_study/function_global.py
Compressing: python_study/function_keyword.py
Compressing: python_study/function_local.py
Compressing: python_study/function_param.py
Compressing: python_study/function_return.py
Compressing: python_study/function_varargs.py
Compressing: python_study/hello.ipynb
Compressing: python_study/hello.py
Compressing: python_study/if.py
Compressing: python_study/main.py
Compressing: python_study/module_using_name.py
Compressing: python_study/module_using_name_import.py
Compressing: python_study/module_using_sys.py
Compressing: python_study/mymodule.py
Compressing: python_study/mymodule_demo.py
Compressing: python_study/mymodule_demo2.py
Compressing: python_study/pyc_compile.py
Compressing: python_study/str_format.py
Compressing: python_study/var.py
Compressing: python_study/while.py
Successful backup to E:\backup\20230301\191731.zip

▶ 동작 원리

많은 부분은 이전과 그대로입니다.

변경된 부분은 주 백업 directory 안에 그 날짜에 해당하는 directory가 있는지 여부를 os.path.exists 함수로 확인하는 부분입니다. 해당 directory가 없으면, os.mkdir 함수를 통해 directory를 새로 만듭니다.


이상으로 백업 프로그램을 변경해 보았습니다.

 

감사합니다.

 

Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다.

 

728x90

댓글