【办公类-04-02】华为助手导出照片读取拍摄时间分类导出,视频不行) ...

嚴華  论坛元老 | 2024-6-14 21:39:34 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1731|帖子 1731|积分 5193

配景需求
本日我用QQ相册导出照片,但是始终在转圈,手机上无法跳出“连结“”的提示,换了台式和条记本都无法传输。(明显5月14日还可以导出的)

末了我只能用华为传输助手,把照片快速提取出来了。


使用原来的日期分类代码

【办公类-04】VS python手机照片视频按日期文件夹整理_视频按日期分类-CSDN博客文章欣赏阅读1.7k次,点赞2次,收藏2次。【办公类-04】VS python手机照片视频按日期文件夹整理_视频按日期分类
https://blog.csdn.net/reasonsummer/article/details/122583051
  1. import datetime
  2. import os
  3. import shutil
  4. import time
  5. allFileNum = 0# 所有文件数量从0开始
  6. myfile=[]# 我的文件
  7. mydir=[]# 我的列表
  8. movie_file_format=['avi','mpeg','mp4','mov','ProRes','DNxHR','mfx','mkv','wmv','flv','rmvb','webm','asf']# 视频格式
  9. text_file_format=['DOC','PDF','HTML','TXT','HTL','DOCX']# 文本格式
  10. img_file_format=['bmp','jpg','jpeg','png','tif','gif','pcx','tga','exif','fpx','svg','psd',
  11.                  'cdr','pcd','dxf','ufo','eps','ai','raw','WMF','webp','avif','hdri','flic','emf','ico']# 图片格式
  12. zip_file_format=['rar' ,'zip','7z','CAB','ARJ','LZH','TAR','GZ','ACE','UUE','BZ2','JAR','ISO','MPQ']# 压缩格式
  13. music_file_format=['PCM','WAV','AIFF','MP3','AAC','OGG','WMA','FLAC','ALAC','WMA']# 音乐格式
  14. this_folder= 'D:\\03照片导出' # 整理前的照片所在文件夹,原始路径:
  15. # this_folder=input("原始路径:").replace("\",'/')
  16. those_folder='D:\\04照片整理'# 整理后的照片所在文件夹(原照片删除),目标路径:
  17. # those_folder=input("目标路径:").replace("\",'/')
  18. def printPath(level, path):# 定义输出路径(层级,路径字符串)
  19.     global allFileNum    # 返回allFileNum的全局变量
  20.     '''''
  21.     打印一个目录下的所有文件夹和文件
  22.     '''
  23.     # 所有文件夹,第一个字段是次目录的级别
  24.     dirList = []    # 目录清单
  25.     # 所有文件
  26.     fileList = []
  27.     # 返回一个列表,其中包含在目录条目的名称(google翻译)
  28.     files = os.listdir(path)
  29.     # 先添加目录级别
  30.     dirList.append(str(level))
  31.     for f in files:
  32.         if (os.path.isdir(path + '/' + f)):  # os.path.isdir()用于判断对象是否为一个目录
  33.             if (f[0] == '.'):# 排除隐藏文件夹。因为隐藏文件夹过多
  34.                 pass
  35.             else:
  36.                 # 添加非隐藏文件夹
  37.                 dirList.append(f)
  38.                 # mydir.append(path + '/' + f)
  39.         if (os.path.isfile(path + '/' + f)):
  40.             # 添加文件
  41.             fileList.append(f)
  42.             myfile.append(path + '/' + f)
  43.     # 当一个标志使用,文件夹列表第一个级别不打印
  44.     i_dl = 0
  45.     for dl in dirList:
  46.         if (i_dl == 0):
  47.             i_dl = i_dl + 1
  48.         else:
  49.             # print("得到的文件夹",'-' * (int(dirList[-1])), dl)
  50.             # 打印目录下的所有文件夹和文件,目录级别+1
  51.             printPath((int(dirList[0])+1), path + '/' + dl)
  52.     for fl in fileList:
  53.         # print("得到的文件路径",'-' * (int(dirList[-1])), fl)
  54.         # 随便计算一下有多少个文件
  55.         allFileNum = allFileNum + 1
  56. def judge_file(oldPath,location):    # 定义判断文件(老文件,位置)
  57.     def TimeStampToTime(timestamp):# 定义时间转戳时间(时间戳)
  58.         timeStruct = time.localtime(timestamp)#时间结构体等于,格式化时间戳为本地的时间(时间戳)
  59.         return time.strftime('%Y-%m-%d %H:%M:%S', timeStruct)#返回本地时间戳(结构累心,时间结构体)
  60.     def get_file_format(file_path):        # 定义获取后的文件格式(文件路径)
  61.         file_name=file_path.split("/")[-1]        #文件名称等于 文件路径 的最后一段 split("/")[-1]  以‘/ ’为分割f符,保留最后一段
  62.         # if file_name.find(".")>0:
  63.         #     file_format=file_name.split('.')[-1] #文件名称等于 文件路径 的最后一段
  64.         #     if file_format.lower() in movie_file_format or file_format.upper() in movie_file_format:
  65.         #         return "视频"
  66.         #     # elif file_format.lower() in text_file_format or file_format.upper() in text_file_format:
  67.         #     #     return "文本"
  68.         #     elif file_format.lower() in img_file_format or file_format.upper() in img_file_format:
  69.         #         return "图片"
  70.         #     elif file_format.lower() in music_file_format or file_format.upper() in music_file_format:
  71.         #         return "音频"
  72.         #     elif file_format.lower() in zip_file_format or file_format.upper() in zip_file_format:
  73.         #         return "压缩"
  74.         #     else:
  75.         #         return "其他"  
  76.         # else:
  77.         #     return "文本"
  78.     def move_file(new_dir):#定义转移文件 新的列表
  79.         old_file_name = oldPath.split("/")[-1]#老文件名等于老路径的最后一段
  80.         # 将文件移动到新文件夹
  81.         shutil.move(oldPath, new_dir + '/' + old_file_name)  # a->b
  82.         print("-"*50+"已完成:%.2f" % ((location + 1) / allFileNum*100))
  83.     # ImageDate = datetime.datetime.strftime(time.ctime(os.stat(imgPath).st_mtime), "%Y-%m-%d %H:%M:%S")
  84.     a = os.stat(oldPath).st_mtime    # 文件时间戳 os.stat(老路径文件).st_mtime
  85.     #得到文件创建时间,判断文件夹是否存在
  86.     creat_time=TimeStampToTime(a)[:-9]
  87.     # 创造时间戳
  88.     print(creat_time) #打印创造的时间 str 2021-01-10 10:05:31
  89.     folder_format=get_file_format(oldPath)
  90.     # 新列表展示为三段式结构——整理后的路径(一级文件夹),创造的时间(二级文件夹),文件格式(图片 视频等 三级文件夹)
  91.     # new_dir="%s/%s/%s"%(those_folder,creat_time,folder_format)   
  92.     # 阿夏需要两级文件夹(整理后的路径(一级文件夹),创造的时间(二级文件夹)里面装了混合的照片和视频。手动整理)
  93.     new_dir="%s/%s"%(those_folder,creat_time)
  94.   
  95.     #不存在文件夹则创建文件夹
  96.     if not os.path.exists(new_dir):
  97.         os.makedirs(new_dir)
  98.         move_file(new_dir)
  99.     #如果存在就判断是否是重复文件
  100.     else :
  101.         if oldPath.split("/")[-1] in os.listdir(new_dir):
  102.             print("重复文件,略过")
  103.             pass
  104.         else:
  105.             move_file(new_dir)
  106. def do_all():
  107.     for i in myfile:
  108.         judge_file(i,myfile.index(i))
  109. printPath(1, this_folder)
  110. do_all()
  111. input()
  112. # ————————————————
  113. # 版权声明:本文为CSDN博主「lidashent」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  114. # 原文链接:https://blog.csdn.net/lidashent/article/details/113919375
复制代码
结果只出现一个文件夹。(从4月26-6月4日)


发现步伐大概按照“修改日期”整理文件了,而不是按照拍摄日期整理



华为助手导出照片,按照创建日期生成了,我需要按照拍摄日期文件夹整理)让AI修改代码内容。







代码展示:

  1. '''
  2. QQ相册导出失灵后,使用华为助手导出照片,结果4月28日-6月4日的照片都打包在6月4日文件夹里
  3. 运用AI对话大师将原来的代码进行修改。实现按如期分类
  4. 华为手机助手导出的照片,指定读取拍摄时间(只能转移照片,视频不行)
  5. 作者:AI对话大师
  6. 时间:2024年6月4日
  7. '''
  8. import os
  9. import shutil
  10. import exifread
  11. allFileNum = 0
  12. myfile = []
  13. mydir = []
  14. img_file_format = ['bmp', 'jpg', 'jpeg', 'png', 'tif', 'gif', 'pcx', 'tga', 'exif', 'fpx', 'svg', 'psd',
  15.                    'cdr', 'pcd', 'dxf', 'ufo', 'eps', 'ai', 'raw', 'WMF', 'webp', 'avif', 'hdri', 'flic', 'emf', 'ico']
  16. video_file_format = ['avi', 'mpeg', 'mp4', 'mov', 'ProRes', 'DNxHR', 'mfx', 'mkv', 'wmv', 'flv', 'rmvb', 'webm', 'asf']
  17. text_file_format = ['DOC', 'PDF', 'HTML', 'TXT', 'HTL', 'DOCX']
  18. # 添加其他文件类型列表
  19. this_folder = 'D:\\03照片导出'
  20. those_folder = 'D:\\04照片整理'
  21. def printPath(level, path):
  22.     global allFileNum
  23.     dirList = []
  24.     fileList = []
  25.     files = os.listdir(path)
  26.     dirList.append(str(level))
  27.     for f in files:
  28.         if (os.path.isdir(path + '/' + f)):
  29.             if (f[0] == '.'):
  30.                 pass
  31.             else:
  32.                 dirList.append(f)
  33.         if (os.path.isfile(path + '/' + f)):
  34.             fileList.append(f)
  35.             myfile.append(path + '/' + f)
  36.     i_dl = 0
  37.     for dl in dirList:
  38.         if (i_dl == 0):
  39.             i_dl = i_dl + 1
  40.         else:
  41.             printPath((int(dirList[0]) + 1), path + '/' + dl)
  42.     for fl in fileList:
  43.         allFileNum = allFileNum + 1
  44. def get_file_format(file_path):
  45.     file_name = file_path.split("/")[-1]
  46.     file_format = file_name.split('.')[-1]
  47.     if file_format.lower() in img_file_format:
  48.         return ""
  49.     elif file_format.lower() in video_file_format:
  50.         return ""
  51.     elif file_format.lower() in text_file_format:
  52.         return ""
  53.     # 添加其他文件类型判断条件
  54.     else:
  55.         return ""
  56. def move_file(oldPath, new_dir):
  57.     old_file_name = oldPath.split("/")[-1]
  58.     shutil.move(oldPath, new_dir + '/' + old_file_name)
  59.     print("-" * 50 + "已完成:%.2f" % ((myfile.index(oldPath) + 1) / allFileNum * 100))
  60. def get_create_time(file_path):
  61.     with open(file_path, 'rb') as f:
  62.         tags = exifread.process_file(f)
  63.         if 'EXIF DateTimeOriginal' in tags:
  64.             datetime_original = tags['EXIF DateTimeOriginal']
  65.             return str(datetime_original).split()[0].replace(":", "-")
  66.     return ""
  67. def judge_file(oldPath, location):
  68.     create_time = get_create_time(oldPath)
  69.     if create_time:
  70.         folder_format = get_file_format(oldPath)
  71.         new_dir = "%s/%s/%s" % (those_folder, create_time, folder_format)
  72.         if not os.path.exists(new_dir):
  73.             os.makedirs(new_dir)
  74.         move_file(oldPath, new_dir)
  75.     else:
  76.         print("无法获取拍摄日期,跳过文件:" + oldPath)
  77. def do_all():
  78.     for i in myfile:
  79.         judge_file(i, myfile.index(i))
  80. printPath(1, this_folder)
  81. do_all()
  82. input()
  83. import os
  84. import subprocess
  85. video_file_format = ['avi', 'mpeg', 'mp4', 'mov', 'ProRes', 'DNxHR', 'mfx', 'mkv', 'wmv', 'flv', 'rmvb', 'webm', 'asf']
  86. def get_video_create_time(file_path):
  87.     if file_path.split('.')[-1].lower() not in video_file_format:
  88.         return ""
  89.    
  90.     command = ['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', file_path]
  91.     result = subprocess.run(command, capture_output=True, text=True)
  92.    
  93.     if result.returncode == 0:
  94.         try:
  95.             metadata = result.stdout
  96.             creation_time = metadata['format']['tags']['creation_time']
  97.             return creation_time.split('T')[0]
  98.         except (KeyError, IndexError):
  99.             pass
  100.    
  101.     return ""
  102. def judge_file(oldPath, location):
  103.     create_time = get_create_time(oldPath)
  104.     if not create_time:
  105.         create_time = get_video_create_time(oldPath)
  106.    
  107.     if create_time:
  108.         folder_format = get_file_format(oldPath)
  109.         new_dir = "%s/%s/%s" % (those_folder, create_time, folder_format)
  110.         if not os.path.exists(new_dir):
  111.             os.makedirs(new_dir)
  112.         move_file(oldPath, new_dir)
  113.     else:
  114.         print("无法获取拍摄时间,跳过文件:" + oldPath)
  115. # 在 judge_file 函数中添加了对视频文件的处理。首先,我们尝试使用 get_create_time 函数获取拍摄时间。如果获取不到,则调用 get_video_create_time 函数来获取视频文件的拍摄时间。如果最终无法获取到拍摄时间,则跳过处理该文件。
复制代码





看看是否可以想办法读取照片、视频的文件名,将图片、视频举行剪切转移黏贴。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表