根据图片的元数据将图片移动到文件夹



因为我对编码和python相当陌生,所以我无法解决问题。我想创建一个代码,从.jpeg文件中获取 exif 信息,然后根据我在 exif 中找到的日期创建文件夹,然后将这些图片移动到各自的文件夹中。到目前为止,我的代码获取日期,然后创建文件夹(年,然后在月内,然后在日内(。但是我不知道如何将图片移动到相应的文件夹中。这是我的代码。任何帮助将不胜感激。

import os
import sys
import PIL.Image
import PIL
from PIL import ExifTags
import datetime
from datetime import datetime
import os.path, time
from os import walk
import pathlib
import re

path=os.path.join(sys.argv[1])
destination=os.path.join(sys.argv[2])

#Pour creer la liste contenant les fichiers du dossier
def getListOfFiles(path):
listOfFile=os.listdir(path)    
allFiles=[]
for i in listOfFile:
fullPath=os.path.join(path, i)
if os.path.isdir(fullPath):
allFiles= allFiles+getListOfFiles(fullPath)
else:
allFiles.append(fullPath)
return allFiles
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
#print(getListOfFiles(path))
#print(len(getListOfFiles(path)))
#get metadata
foldertobemade=[]
extensions = ('.jpg')
for i in getListOfFiles(path):
#print(i) #prints all the names of images
ext = os.path.splitext(i)[-1].lower()
#print(ext)
if ext == extensions:
#print(i)    
img=PIL.Image.open(i)
#print(img) #prints the image opened
exif=img._getexif()
#print(exif) #prints metadata
try:
if 36867 in exif:
#print(exif[36867])
foldertobemade.append(exif[36867])
except Exception as e:
pass 
#print(foldertobemade)        

for dates in foldertobemade:
#print(dates[:4])
#print(dates[5:7])
#print(dates[8:10])
for i in getListOfFiles(path):
if not os.path.exists(dates[:4]):   
os.makedirs(dates[:4]) 
if not os.path.exists(dates[:4]+ "/" + dates[5:7]):   
os.makedirs(dates[:4]+ "/" + dates[5:7])
if not os.path.exists(dates[:4]+ "/" + dates[5:7]+ "/" +dates[8:10]):   
os.makedirs(dates[:4]+ "/" + dates[5:7]+ "/" +dates[8:10])

我只是将shutil.move(i, 'dest_folder')添加到您的不同目的地即可。

import os
import sys
import PIL.Image
import PIL
from PIL import ExifTags
import datetime
from datetime import datetime
import os.path, time
from os import walk
import pathlib
import re
import shutil
path=os.path.join(sys.argv[1])
destination="/"

#Pour creer la liste contenant les fichiers du dossier
def getListOfFiles(path):
listOfFile=os.listdir(path)
allFiles=[]
for i in listOfFile:
fullPath=os.path.join(path, i)
if os.path.isdir(fullPath):
allFiles= allFiles+getListOfFiles(fullPath)
else:
allFiles.append(fullPath)
return allFiles
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
#print(getListOfFiles(path))
#print(len(getListOfFiles(path)))
#get metadata
foldertobemade=[]
extensions = ('.jpg')
for i in getListOfFiles(path):
#print(i) #prints all the names of images
ext = os.path.splitext(i)[-1].lower()
#print(ext)
if ext == extensions:
#print(i)
img=PIL.Image.open(i)
#print(img) #prints the image opened
exif=img._getexif()
#print(exif) #prints metadata
try:
if 36867 in exif:
#print(exif[36867])
foldertobemade.append(exif[36867])
except Exception as e:
pass
#print(foldertobemade)

for dates in foldertobemade:
#print(dates[:4])
#print(dates[5:7])
#print(dates[8:10])
for i in getListOfFiles(path):
try:
if not os.path.exists(dates[:4]) and  not os.path.exists(dates[:4]+"/"+i):
os.makedirs(dates[:4])
shutil.move(i,dates[:4])
if not os.path.exists(dates[:4]+ "/" + dates[5:7]) and not os.path.exists(dates[:4]+"/"+i):
os.makedirs(dates[:4]+ "/" + dates[5:7])
shutil.move( i,dates[:4]+ "/" + dates[5:7])
if not os.path.exists(dates[:4]+ "/" + dates[5:7]+ "/" +dates[8:10]) and not  os.path.exists(dates[:4]+"/"+i):
os.makedirs(dates[:4]+ "/" + dates[5:7]+ "/" +dates[8:10])
shutil.move(i,dates[:4]+ "/" + dates[5:7]+ "/" +dates[8:10])
except shutil.Error as e:
print(e)

最新更新