配景需求
本日我用QQ相册导出照片,但是始终在转圈,手机上无法跳出“连结“”的提示,换了台式和条记本都无法传输。(明显5月14日还可以导出的)
末了我只能用华为传输助手,把照片快速提取出来了。
使用原来的日期分类代码
【办公类-04】VS python手机照片视频按日期文件夹整理_视频按日期分类-CSDN博客文章欣赏阅读1.7k次,点赞2次,收藏2次。【办公类-04】VS python手机照片视频按日期文件夹整理_视频按日期分类 https://blog.csdn.net/reasonsummer/article/details/122583051
- import datetime
- import os
- import shutil
- import time
- allFileNum = 0# 所有文件数量从0开始
- myfile=[]# 我的文件
- mydir=[]# 我的列表
- movie_file_format=['avi','mpeg','mp4','mov','ProRes','DNxHR','mfx','mkv','wmv','flv','rmvb','webm','asf']# 视频格式
- text_file_format=['DOC','PDF','HTML','TXT','HTL','DOCX']# 文本格式
- img_file_format=['bmp','jpg','jpeg','png','tif','gif','pcx','tga','exif','fpx','svg','psd',
- 'cdr','pcd','dxf','ufo','eps','ai','raw','WMF','webp','avif','hdri','flic','emf','ico']# 图片格式
- zip_file_format=['rar' ,'zip','7z','CAB','ARJ','LZH','TAR','GZ','ACE','UUE','BZ2','JAR','ISO','MPQ']# 压缩格式
- music_file_format=['PCM','WAV','AIFF','MP3','AAC','OGG','WMA','FLAC','ALAC','WMA']# 音乐格式
- this_folder= 'D:\\03照片导出' # 整理前的照片所在文件夹,原始路径:
- # this_folder=input("原始路径:").replace("\",'/')
- those_folder='D:\\04照片整理'# 整理后的照片所在文件夹(原照片删除),目标路径:
- # those_folder=input("目标路径:").replace("\",'/')
- def printPath(level, path):# 定义输出路径(层级,路径字符串)
- global allFileNum # 返回allFileNum的全局变量
- '''''
- 打印一个目录下的所有文件夹和文件
- '''
- # 所有文件夹,第一个字段是次目录的级别
- dirList = [] # 目录清单
- # 所有文件
- fileList = []
- # 返回一个列表,其中包含在目录条目的名称(google翻译)
- files = os.listdir(path)
- # 先添加目录级别
- dirList.append(str(level))
- for f in files:
- if (os.path.isdir(path + '/' + f)): # os.path.isdir()用于判断对象是否为一个目录
- if (f[0] == '.'):# 排除隐藏文件夹。因为隐藏文件夹过多
- pass
- else:
- # 添加非隐藏文件夹
- dirList.append(f)
- # mydir.append(path + '/' + f)
- if (os.path.isfile(path + '/' + f)):
- # 添加文件
- fileList.append(f)
- myfile.append(path + '/' + f)
- # 当一个标志使用,文件夹列表第一个级别不打印
- i_dl = 0
- for dl in dirList:
- if (i_dl == 0):
- i_dl = i_dl + 1
- else:
- # print("得到的文件夹",'-' * (int(dirList[-1])), dl)
- # 打印目录下的所有文件夹和文件,目录级别+1
- printPath((int(dirList[0])+1), path + '/' + dl)
- for fl in fileList:
- # print("得到的文件路径",'-' * (int(dirList[-1])), fl)
- # 随便计算一下有多少个文件
- allFileNum = allFileNum + 1
-
- def judge_file(oldPath,location): # 定义判断文件(老文件,位置)
- def TimeStampToTime(timestamp):# 定义时间转戳时间(时间戳)
- timeStruct = time.localtime(timestamp)#时间结构体等于,格式化时间戳为本地的时间(时间戳)
- return time.strftime('%Y-%m-%d %H:%M:%S', timeStruct)#返回本地时间戳(结构累心,时间结构体)
- def get_file_format(file_path): # 定义获取后的文件格式(文件路径)
- file_name=file_path.split("/")[-1] #文件名称等于 文件路径 的最后一段 split("/")[-1] 以‘/ ’为分割f符,保留最后一段
- # if file_name.find(".")>0:
- # file_format=file_name.split('.')[-1] #文件名称等于 文件路径 的最后一段
- # if file_format.lower() in movie_file_format or file_format.upper() in movie_file_format:
- # return "视频"
- # # elif file_format.lower() in text_file_format or file_format.upper() in text_file_format:
- # # return "文本"
- # elif file_format.lower() in img_file_format or file_format.upper() in img_file_format:
- # return "图片"
- # elif file_format.lower() in music_file_format or file_format.upper() in music_file_format:
- # return "音频"
- # elif file_format.lower() in zip_file_format or file_format.upper() in zip_file_format:
- # return "压缩"
- # else:
- # return "其他"
- # else:
- # return "文本"
- def move_file(new_dir):#定义转移文件 新的列表
- old_file_name = oldPath.split("/")[-1]#老文件名等于老路径的最后一段
- # 将文件移动到新文件夹
- shutil.move(oldPath, new_dir + '/' + old_file_name) # a->b
- print("-"*50+"已完成:%.2f" % ((location + 1) / allFileNum*100))
- # ImageDate = datetime.datetime.strftime(time.ctime(os.stat(imgPath).st_mtime), "%Y-%m-%d %H:%M:%S")
- a = os.stat(oldPath).st_mtime # 文件时间戳 os.stat(老路径文件).st_mtime
- #得到文件创建时间,判断文件夹是否存在
- creat_time=TimeStampToTime(a)[:-9]
- # 创造时间戳
- print(creat_time) #打印创造的时间 str 2021-01-10 10:05:31
- folder_format=get_file_format(oldPath)
- # 新列表展示为三段式结构——整理后的路径(一级文件夹),创造的时间(二级文件夹),文件格式(图片 视频等 三级文件夹)
- # new_dir="%s/%s/%s"%(those_folder,creat_time,folder_format)
- # 阿夏需要两级文件夹(整理后的路径(一级文件夹),创造的时间(二级文件夹)里面装了混合的照片和视频。手动整理)
- new_dir="%s/%s"%(those_folder,creat_time)
-
- #不存在文件夹则创建文件夹
- if not os.path.exists(new_dir):
- os.makedirs(new_dir)
- move_file(new_dir)
- #如果存在就判断是否是重复文件
- else :
- if oldPath.split("/")[-1] in os.listdir(new_dir):
- print("重复文件,略过")
- pass
- else:
- move_file(new_dir)
- def do_all():
- for i in myfile:
- judge_file(i,myfile.index(i))
- printPath(1, this_folder)
- do_all()
- input()
- # ————————————————
- # 版权声明:本文为CSDN博主「lidashent」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- # 原文链接:https://blog.csdn.net/lidashent/article/details/113919375
复制代码 结果只出现一个文件夹。(从4月26-6月4日)
发现步伐大概按照“修改日期”整理文件了,而不是按照拍摄日期整理
华为助手导出照片,按照创建日期生成了,我需要按照拍摄日期文件夹整理)让AI修改代码内容。
代码展示:
- '''
- QQ相册导出失灵后,使用华为助手导出照片,结果4月28日-6月4日的照片都打包在6月4日文件夹里
- 运用AI对话大师将原来的代码进行修改。实现按如期分类
- 华为手机助手导出的照片,指定读取拍摄时间(只能转移照片,视频不行)
- 作者:AI对话大师
- 时间:2024年6月4日
- '''
- import os
- import shutil
- import exifread
- allFileNum = 0
- myfile = []
- mydir = []
- img_file_format = ['bmp', 'jpg', 'jpeg', 'png', 'tif', 'gif', 'pcx', 'tga', 'exif', 'fpx', 'svg', 'psd',
- 'cdr', 'pcd', 'dxf', 'ufo', 'eps', 'ai', 'raw', 'WMF', 'webp', 'avif', 'hdri', 'flic', 'emf', 'ico']
- video_file_format = ['avi', 'mpeg', 'mp4', 'mov', 'ProRes', 'DNxHR', 'mfx', 'mkv', 'wmv', 'flv', 'rmvb', 'webm', 'asf']
- text_file_format = ['DOC', 'PDF', 'HTML', 'TXT', 'HTL', 'DOCX']
- # 添加其他文件类型列表
- this_folder = 'D:\\03照片导出'
- those_folder = 'D:\\04照片整理'
- def printPath(level, path):
- global allFileNum
- dirList = []
- fileList = []
- files = os.listdir(path)
- dirList.append(str(level))
- for f in files:
- if (os.path.isdir(path + '/' + f)):
- if (f[0] == '.'):
- pass
- else:
- dirList.append(f)
- if (os.path.isfile(path + '/' + f)):
- fileList.append(f)
- myfile.append(path + '/' + f)
- i_dl = 0
- for dl in dirList:
- if (i_dl == 0):
- i_dl = i_dl + 1
- else:
- printPath((int(dirList[0]) + 1), path + '/' + dl)
- for fl in fileList:
- allFileNum = allFileNum + 1
- def get_file_format(file_path):
- file_name = file_path.split("/")[-1]
- file_format = file_name.split('.')[-1]
- if file_format.lower() in img_file_format:
- return ""
- elif file_format.lower() in video_file_format:
- return ""
- elif file_format.lower() in text_file_format:
- return ""
- # 添加其他文件类型判断条件
- else:
- return ""
- def move_file(oldPath, new_dir):
- old_file_name = oldPath.split("/")[-1]
- shutil.move(oldPath, new_dir + '/' + old_file_name)
- print("-" * 50 + "已完成:%.2f" % ((myfile.index(oldPath) + 1) / allFileNum * 100))
- def get_create_time(file_path):
- with open(file_path, 'rb') as f:
- tags = exifread.process_file(f)
- if 'EXIF DateTimeOriginal' in tags:
- datetime_original = tags['EXIF DateTimeOriginal']
- return str(datetime_original).split()[0].replace(":", "-")
- return ""
- def judge_file(oldPath, location):
- create_time = get_create_time(oldPath)
- if create_time:
- folder_format = get_file_format(oldPath)
- new_dir = "%s/%s/%s" % (those_folder, create_time, folder_format)
- if not os.path.exists(new_dir):
- os.makedirs(new_dir)
- move_file(oldPath, new_dir)
- else:
- print("无法获取拍摄日期,跳过文件:" + oldPath)
- def do_all():
- for i in myfile:
- judge_file(i, myfile.index(i))
- printPath(1, this_folder)
- do_all()
- input()
- import os
- import subprocess
- video_file_format = ['avi', 'mpeg', 'mp4', 'mov', 'ProRes', 'DNxHR', 'mfx', 'mkv', 'wmv', 'flv', 'rmvb', 'webm', 'asf']
- def get_video_create_time(file_path):
- if file_path.split('.')[-1].lower() not in video_file_format:
- return ""
-
- command = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', file_path]
- result = subprocess.run(command, capture_output=True, text=True)
-
- if result.returncode == 0:
- try:
- metadata = result.stdout
- creation_time = metadata['format']['tags']['creation_time']
- return creation_time.split('T')[0]
- except (KeyError, IndexError):
- pass
-
- return ""
- def judge_file(oldPath, location):
- create_time = get_create_time(oldPath)
- if not create_time:
- create_time = get_video_create_time(oldPath)
-
- if create_time:
- folder_format = get_file_format(oldPath)
- new_dir = "%s/%s/%s" % (those_folder, create_time, folder_format)
- if not os.path.exists(new_dir):
- os.makedirs(new_dir)
- move_file(oldPath, new_dir)
- else:
- print("无法获取拍摄时间,跳过文件:" + oldPath)
- # 在 judge_file 函数中添加了对视频文件的处理。首先,我们尝试使用 get_create_time 函数获取拍摄时间。如果获取不到,则调用 get_video_create_time 函数来获取视频文件的拍摄时间。如果最终无法获取到拍摄时间,则跳过处理该文件。
复制代码

  
看看是否可以想办法读取照片、视频的文件名,将图片、视频举行剪切转移黏贴。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |