: 필요한 파일을 찾아 내는 가장 핵심적인 부분이다.
① 해당 일을 입력 받고,
② 입력 받을 날짜를 기준에 포함하는 대상(file)을 조회하는 기능이다.
먼저 해당 기능을 구현하기 전 알아야 하는 내용이 2가지가 있는데,
1. '파일에 사용되는 시간'과 2. '시간을 표현하는 방식'이다.
이게 뭐가 다른가 라고 생각할 수 있는 분들을 위해 간단한 내용으로 설명을 진행해보겠다.
엑셀이나 기타 파일을 우클릭 한 후, '속성' 항목을 눌러보게되면
'만든 날짜', '수정한 날짜', '엑세스한 날짜' 가 있다.
이 중에서 우리가 알아야 할 항목은 '만든 날짜' 와 '수정한 날짜' 이다.
- 만든 날짜 : 해당 파일을 처음 만든 날짜
- 수정한 날짜 : 마지막으로 파일을 저장한 날짜
예를 들어 위의 파일을 보면 해당 파일은 2021년 10월 26일 오후 7:34:40 에 해당 파일을 만들고,
1회 이상 혹은 여러번의 수정을 거친 후, 마지막으로 저장을 한 날짜는 2022년 1월 14일 오후 7:24:24 이다.
그래서 누군가 이전에 작업한 파일 중 오늘 내 PC에 저장한 파일을 찾기 위해선 '만든 날짜'
내가 이전에 받은 파일 중 오늘 수정한 파일을 찾기 위해선 '수정한 날짜' 를 확인해야한다.
파이썬에서 아래 모듈을 통해 만든 날짜와 수정한 날짜를 확인할 수 있다.
# 파일 생성 날짜
os.path.getctime(fullname_file)
# 파일 수정 날짜
os.path.getmtime(fullname_file)
다만, 확인 시, 우리가 알고 있는 날짜 형식이 아닌 숫자 형식으로 나타난다.
1635244480.2476833
1642155864.1130557
우리는 읽을 수 없지만.....컴퓨터만 알고 있다. 그래서 우리가 알고 있는 형식으로 바꿀려면 time 모듈을 활용하여
datetime 형식으로 변경할 수 있다.
# 파일 생성 날짜
tm_create = time.gmtime(os.path.getctime(fullname_file))
# 파일 수정 날짜
tm_edit = time.gmtime(os.path.getmtime(fullname_file))
print(tm_create)
print(tm_edit)
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=26, tm_hour=10, tm_min=34, tm_sec=40, tm_wday=1, tm_yday=299, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=1, tm_mday=14, tm_hour=10, tm_min=24, tm_sec=24, tm_wday=4, tm_yday=14, tm_isdst=0)
으로 확인할 수 있다. 다만 시간 다른 값은 모두 같으나, 시간 값이 다른 것을 확인 할 수 있다.
시간 차를 확인하기 위해선 위에서 언급한 2. '시간을 표현하는 방식'에 대한 이해가 필요하다.
세상의 중심은 나지만? 시간은 중심은 영국, 정확히는 영국의 그리니치 천문대이다. 이러한 시간을 표현하는 방식을 GMT(Greenwich Mean Time)라고 한다.
https://terms.naver.com/entry.naver?docId=3477121&cid=58439&categoryId=58439
우리가 흔히 말하는 시차라는 개념이다.
중앙에 보이는 시차 9시간은 위에서 확인한 시간 값과 동일한 것이 눈에 띄인다.
내용이 길어져 시간 값에 대한 내용은 다음편에 ....
def search_target_files():
#print(search_period_input.get())
global diff_days
# UI - search_period_input 미입력시 0
if search_period_input.get() == '':
diff_days = timedelta(days=int(0))
else:
try :
diff_days = timedelta(days=int(search_period_input.get()))
except:
msb.showwarning('날짜 입력 오류', '숫자만 입력하세요.')
return
#print(diff_days)
# scan_wait_folder 미지정시 warning 메세지 전달
if scan_wait_folder == '':
msb.showwarning('Scan Folder 미지정', 'Scan 경로를 설정하세요')
return
else :
# scan 폴더 검색 / 재귀함수 이용 하위 폴더 계속 검색
file_detail_search(scan_wait_folder)
print(file_full_path)
global target_file_list_idx
try:
for file in file_full_path[target_file_list_idx:]:
target_file_list.insert(target_file_list_idx, file)
target_file_list_idx += 1
except:
pass
msb.showinfo('검색 완료', '해당 폴더 검색이 완료되었습니다.')
# 시간 값 이용하여 해당 파일 리스트 작성 / 재귀함수
# 파일 검색 조건 1. 확장자 / 2. 파일 생성날짜 또는 수정날짜
def file_detail_search(dir):
files = os.listdir(dir)
for file in files:
fullname_file = os.path.join(dir,file)
if os.path.isdir(fullname_file):
file_detail_search(fullname_file)
else:
#print(fullname_file)
#확장자 확인
if fullname_file[-3:] == 'jpg' or fullname_file[-3:] == 'png' or fullname_file[-3:] == 'bmp' or fullname_file[-3:] == 'pdf' or fullname_file[-4:] == 'xlsx':
# 파일 생성 날짜
tm_create = time.gmtime(os.path.getctime(fullname_file))
# 파일 수정 날짜
tm_edit = time.gmtime(os.path.getmtime(fullname_file))
if datetime.fromtimestamp(time.mktime(tm_edit)) + timezone_kor > today_time - diff_days or datetime.fromtimestamp(time.mktime(tm_create)) + timezone_kor > today_time - diff_days:
#print(today_time - diff_days)
#print(fullname_file)
#datetime 객체로 변환
#print(datetime.fromtimestamp(time.mktime(tm_edit)) + timezone_kor )
#print(datetime.fromtimestamp(time.mktime(tm_create)) + timezone_kor )
file_full_path.append(fullname_file)
python 백업 프로그램 만들기 2 - 기능1 (0) | 2022.01.13 |
---|---|
python 백업 프로그램 만들기 1 - UI (0) | 2022.01.12 |
python 백업 프로그램 만들기 0 intro (0) | 2022.01.12 |
댓글 영역