手把手教你把网盘备份照片下载本地后日期错误改回来

手把手教你把网盘备份照片下载本地后日期错误改回来
2023年02月19日 14:06 什么值得买

作者:CCCC150

本文代码由CHATGPT提供  

   我之前的照片都是备份在网盘当中,20年有了nas就把照片全部下载回来但是却发现照片的修改日期全部变成了下载当天的日期。这导致我在nas中浏览照片的时间线都变成了一天,非常不方便

解决办法

这边有两种情况

1.照片存有EXIF信息

可以在这个网站查看是否存有exif

https://exif.tuchong.com/

准备工作

首先官网下载vscode,安装

https://code.visualstudio.com/

   安装完成后按我的操作进行插件下载

安装完成后重新打开vscode就变成中文界面了。

随后打开CMD分别输入

pip install Pillow

pip3 install datetime

在Python中,datetime 模块提供了处理日期和时间的功能。

Pillow库来读取照片的exif信息,并使用os库来更改文件的修改日期。

安装完成后会提示成功

再重新打开vscode,新建一个python文件

文件→新建文件→python文件

输入代码,其中dir_path = r"你的照片地址" 修改一下例如dir_path = r"C:UsersCCCCDesktopphoto"

import os

import datetime

from PIL import Image

from PIL.ExifTags import TAGS

dir_path = r"C:UsersCCCCDesktopphoto"

# 获取文件列表

file_list = os.listdir(dir_path)

for file_name in file_list:

    file_path = os.path.join(dir_path, file_name)

    try:

        # 尝试打开图片文件

        with Image.open(file_path) as img:

            # 获取图片的EXIF信息

            exif_data = img._getexif()

            # 如果图片包含EXIF信息

            if exif_data:

                # 获取拍摄日期和时间信息

                datetime_str = exif_data.get(36867)

                if datetime_str:

                    # 将字符串解析为datetime对象

                    dt = datetime.datetime.strptime(datetime_str, "%Y:%m:%d %H:%M:%S")

                    # 将修改日期设置为拍摄日期

                    os.utime(file_path, (os.path.getatime(file_path), dt.timestamp()))

                    print(f"{file_name}: 拍摄日期设置为 {datetime_str}")

                else:

                    print(f"{file_name}: 没有找到拍摄日期信息,跳过")

            else:

                print(f"{file_name}: 没有EXIF信息,跳过")

    except Exception as e:

        print(f"{file_name}: 处理出错,错误信息:{e}")

点击运行→非调试模式运行

大功告成

那如果照片没有EXIF信息怎么办

我自己是这么解决的,通过提取文件名中的日期信息把它修改到修改日期,主要问题是如何提取文件名中的日期信息,这里我运用了CHATGPT来帮我编写代码。

首先调教一下CHATGPT

可以将你文件中有日期的文件名格式挑出典型让他学习理解。

然后告诉CHATGPT

请在"X:Moments"识别文件名的日期并修改文件“修改日期”

这样我们就能得到一个代码,但每个人文件的命名方式不一样所以代码也有可能不一样,我这里贴出我的代码,大家可以尝试。

# 指定目录

directory = r'X:Moments'

# 匹配日期的正则表达式

pattern = r'd{4}-d{2}-d{2}'

# 遍历目录下的所有文件

for root, dirs, files in os.walk(directory):

    for file in files:

        # 提取文件名中的日期信息

        match = re.search(pattern, file)

        if match:

            date_str = match.group()

            # 将日期信息转换为日期对象

            date = datetime.datetime.strptime(date_str, '%Y-%m-%d')

            # 获取文件路径

            file_path = os.path.join(root, file)

            # 修改文件的修改日期为日期对象对应的时间戳

            os.utime(file_path, (os.path.getatime(file_path), date.timestamp()))

这样也能更改大部分文件,也算另辟蹊了。

大部分文件我都通过这两个办法恢复了,有一些文件没有exif信息和文件日期信息,那就没有办法了。

这篇文章的解决办法完全靠CHATGPT提供思路,包括报错等其他代码问题都是通过CHATGPT解决。谢谢科技!科技改变生活!

本文是二次编辑了,第一次忘记保存了又重新写了一遍

第一次写文章如有不足请海涵。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部