最近準備把近幾年手機裏面存儲的照片按年份分類存儲到硬盤裏面,不知不覺累積了4000多張照片,人工一張張分類實在是太費時間、也容易出錯。好在每一張照片的屬性裏面都記錄了拍攝時間,用python很容易就能獲取到每一張照片拍攝的年份。然後用年份建立相應的文件夾,把照片移動到對應年份的文件夾就好了。
幾點細節:
- 如果是用mac的“照片”軟件導出照片的話,一定要選擇導出“未修改的原片”,不然會丟失原片的拍攝時間;
- 實際操作的時候,有一部分重複照片,我們用emove_repetition()函數來去除重複的照片。
詳細代碼如下:
import glob
import os
import exifread
import time
import datetime
import shutil
def remove_repetition(filenames,filenames_back):
#刪除重複的文件
i =0
for _ in filenames_back:
if _.find('(1)') > 0 or _.find('(2)') > 0:
print(_)
os.remove(_)
filenames.remove(_)
i += 1
print(i)
def TimeStampToTime(timestamp):
#轉換時間格式
timeStruct = time.localtime(timestamp)
# return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)
return time.strftime('%Y',timeStruct)
def get_FileCreateTime(filePath):
#獲取文件創建時間
# filePath = unicode(filePath,'utf8')
t = os.path.getmtime(filePath)
return TimeStampToTime(t)
def My_main():
#獲取當前文件夾下面的所有文件,不包含文件夾
filenames = [x for x in glob.iglob("*.*", recursive=False)]
filenames.remove('solve.py')
#設置工作路徑
curr_path = os.getcwd()
#去除重複的文件
filenames_back = filenames[::]
remove_repetition(filenames, filenames_back)
#根據文件的創建時間對文件分類
for file in filenames:
os.chdir(curr_path)
year = get_FileCreateTime(file)
if not os.path.exists(year):
os.makedirs(year)
print('Create '+year+' success')
des_path = year + '/' + file
shutil.move(file, des_path)#移動文件或文件夾
if __name__ == "__main__":
My_main()