Python기초강의강좌, 파이썬기초강의강좌, Python백업프로그램
#028 파이썬 기초 - 문제 해결 Part 1
지금까지 파이썬이라는 언어의 여러 가지 구성 요소에 대해 배워 보았습니다. 이제는 지금까지 배운 것들을 토대로, 뭔가 유용한 것을 하는 프로그램을 만들어 보도록 합시다. 이 챕터의 목표는 여러분이 직접 파이썬 스크립트를 만들고 사용하는 법을 배우는 것입니다.
문제
다음과 같은 문제를 해결해 봅시다:
"내 중요한 파일들을 백업해 두는 프로그램을 만들고 싶어요"
이것은 간단한 문제이지만, 아직 어떻게 접근하면 좋을지 정보가 부족합니다. 따라서 약간 *분석*을 해 보도록 합시다.
예를 들어, 어떤 파일을 백업할지 어떻게 지정해 줄까요? 파일들은 어떻게 저장되어야 하며 또 어디에 저장되어야 할까요?
문제에 대해 분석한 이후에는, 프로그램을 *설계*해야 합니다. 이를 위해 우리가 만들 프로그램이 어떻게 동작하면 좋을지 그 목록을 만들어 봅시다. 저는 아래와 같이 저의 방식대로 목록을 만들었습니다. 그러나 모든 사람이 서로 다른 생각을 가지고 있는 것이 당연하므로, 여러분이 목록을 만들어도 저와 같은 항목들로 구성되어 있지 않을 수 있겠죠. 달라도 아무 상관없습니다.
• 백업할 파일과 디렉터리들은 리스트의 형태로 지정해 둔다.
• 주 백업 디렉터리를 두고, 백업은 그 안에 저장되어야 한다.
• 백업된 파일들은 zip파일로 압축해 둔다.
• zip 파일의 이름은 현재 날짜와 시간으로 한다.
• 명령줄 인터페이스에서 사용할 수 있는 어떤 압축 유틸리티든지 사용이 가능합니다)
• 윈도에 커맨드라인 압축명령이 없어서, 여기서는 반디집에서 제공하는 커맨드라인 압축명령 bz을 사용합니다.
• https://kr.bandisoft.com/bandizip
반디집 공식 홈페이지 · ALZ, EGG, 7Z, RAR 지원 무료 압축 프로그램
반디집 (Windows) 반디집은 다양한 기능을 제공하고 빠르게 작동하는 압축 프로그램입니다. 무료로도 사용할 수 있으며, 유료 에디션은 다양한 고급 기능을 제공합니다. 주요 기능 지원 OS: Windows 7/
kr.bandisoft.com
에서 반디집을 깔아주세요.
• 커맨드라인 압축명령을 제공하는 다른 프로그램을 사용하셔도 됩니다. 대신 사용법은 익히셔야 합니다.
첫 번째 프로그램
일단은 프로그램을 안정적이게 설계한 것 같으므로, 코드를 입력하여 프로그램으로 구현해 보도록 합시다.
▶ backup_ver1.py로 저장하세요:
# Filename : backup_ver1.py
# -*- coding:utf-8 -*-
import os
import time
# source 디렉토리 # E:\python_study
# 각자의 프로그램 소스 디렉토리를 지정하면 됩니다.
source = 'E:\\python_study' # r'E:\python_study' 가능
# backup 디렉토리 # E:\backup
# 각자의 프로그램 백업 디렉토리를 지정하면 됩니다.
# 백업 디렉토리는 미리 생성해 두어야 합니다.
target_dir = 'E:\\backup' # r'E:\backup' 가능
# 파일명 구성
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
# 타겟 확인
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_ver1.py
E:\backup\20230228215117.zip
bz c E:\backup\20230228215117.zip E:\python_study
bz 7.30(Beta,x64) - Bandizip console tool. Copyright(C) 2022 Bandisoft
Creating archive: E:\backup\20230228215117.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/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
bz 7.30(Beta,x64) - Bandizip console tool. Copyright(C) 2022 Bandisoft
Creating archive: E:\backup\20230228215117.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/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
Successful backup to E:\backup\20230228215117.zip
타깃 디렉터리에 가면 생성된 파일을 확인할 수 있습니다.
▶ 동작 원리
먼저 os와 time 모듈을 불러왔습니다. 그리고, 백업할 파일들과 디렉터리들을 source라는 리스트에 담아 두었고, 또 백업을 저장해 둘 대상 디렉터리는 target_dir 변수에 지정해 주었습니다. zip 파일의 이름은 현재 날짜와 시간으로 할 것이므로 time.strftime() 함수를 사용하여 현재 날짜와 시간을 얻어온 후, zip 확장자를 붙여 target에 저장하도록 했습니다.
여기서 os.sep 변수를 주목하시기 바랍니다. 이것은 여러분의 운영 체제에 다른 디렉터리 구분자를 나타내는 것으로 GNU/Linux 와 Unix 환경에서는 '/' 일 것이고, 윈도 환경에서는 '\\' 일 것이며, Mac OS에서는 ':' 일 것입니다. 이러한 문자들을 직접 사용하지 않고 os.sep을 사용하는 것은 여러분의 프로그램에 범용성을 제공하며, 따라서 여러 운영체제에서 수정 없이 사용할 수 있게 됩니다.
위 에제 프로그램은 반디집의 bz 명령을 사용하기 때문에 다른 운영 체재에서는 사용이 불가합니다.
위 프로그램에서 사용한 것처럼 time.strftime() 함수는 특별한 형식을 인수로 넘겨받습니다. % Y는 네 자리의 연도로 치환되며, % m 은 두 자리의 달 즉 01과 12 사이의 숫자를 의미합니다. 날짜 형식에 대해서는 파이썬 레퍼런스 매뉴얼을 참고하시기 바랍니다.
이제 대상 zip 파일의 이름을 생성하기 위해 문자열 결합 연산자인 더하기 연산자를 사용하여 두 문자열을 합쳐서 하나의 문자열로 만듭니다. 그리고, cmd라는 문자열을 만들어 실제로 실행하게 될 문자열을 만듭니다. cmd 창에서 이 문자열을 실행시켜 보고 잘 동작하는지 확인해 볼 수 있을 것입니다.
최종적으로 os.system 함수를 통해 이 명령을 실제 시스템(system)의 쉘에서 실행시킵니다. 그러면 프로그램이 성공적으로 실행된 경우 0 이 반환되며 그렇지 않으면 오류 코드가 반환됩니다.
이제 명령의 실행 결과에 따라, 적절한 메시지를 출력해 주고 백업이 성공했는지 실패했는지를 화면에 출력해 줍니다.
여기까지입니다. 이제 우리는 중요한 파일을 백업하는 스크립트를 성공적으로 만들었습니다!
참고 : 이스케이프 문자 백슬래시를 두 번씩 입력하는 것보다 raw 문자열을 이용할 수도 있습니다. 예를 들어, 'C:\\Documents' 는 r’C:\Documents' 로도 쓸 수 있습니다. 그러나, 'C:\Documents' 와 같이 사용하지 마시기 바랍니다. 이것은 \D 라는 알 수 없는 이스케이프 문자를 의미하는 것으로 오류가 발생합니다. |
이번 시간에는 "파이썬 프로그램을 저장하는 폴더"를 백업하는 프로그램을 작성해 보았습니다.
어떠셨나요? 생각보다 어렵지 않았죠?
수고하셨습니다.
Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다. |
'IT > 파이썬 기초 (Python)' 카테고리의 다른 글
#030 파이썬 기초 - 문제 해결 Part 3 (56) | 2023.03.13 |
---|---|
#029 파이썬 기초 - 문제 해결 Part 2 (59) | 2023.03.12 |
#027 파이썬 기초 - 자료구조 4편 (Python Data Structure Part 4) (74) | 2023.03.09 |
#026 파이썬 기초 - 자료구조 3편 (Python Data Structure Part 3) (87) | 2023.03.08 |
#025 파이썬 기초 - 자료구조 2편 (Python Data Structure Part 2) (83) | 2023.03.07 |
댓글