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

2024-06-26 00:04:12 发布

您现在位置:Python中文网/ 问答频道 /正文

因为我对编码和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])


Tags: pathinimport文件夹forifpilos
1条回答
网友
1楼 · 发布于 2024-06-26 00:04:12

我只需将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)

相关问题 更多 >