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

2023-02-19 14:06:50 12点赞 72收藏 13评论

本文代码由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解决。谢谢科技!科技改变生活!

本文是二次编辑了,第一次忘记保存了又重新写了一遍手把手教你把网盘备份照片下载本地后日期错误改回来 第一次写文章如有不足请海涵。手把手教你把网盘备份照片下载本地后日期错误改回来

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
13评论

  • 精彩
  • 最新
  • 打开PowerShell:
    Get-ChildItem -Path "F:\照片\" -Recurse | ForEach-Object { $_.LastWriteTime = $_.CreationTime }

    "F:\照片\"改成你的照片目标

    校验提示文案

    提交
  • 已经将程序打包,下载后点开dist中的exif1.exe选择文件夹即可
    去看看
    提取码: 76zg

    校验提示文案

    提交
    请问下载后双击没反应是什么情况?

    校验提示文案

    提交
    大老 连接过期了 [喜极而泣]

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 打开PowerShell:
    $(Get-Item C:\路径\文件名.exe).creationTime = $(Get-Date "01/31/2023 01:02:03")
    $(Get-Item C:\路径\文件名.txt).lastaccessTime = $(Get-Date "01/31/2023 01:02:03")
    $(Get-Item C:\路径\文件名.png).lastwriteTime = $(Get-Date "01/31/2023 01:02:03")

    校验提示文案

    提交
  • 收藏备用

    校验提示文案

    提交
  • 大哥,我实在是弄不会了 可以救救我吗

    校验提示文案

    提交
  • 谢谢,先收藏了,有空试试

    校验提示文案

    提交
  • 感谢大佬,我也是把度盘下回来整理发现日期全是当天的

    校验提示文案

    提交
  • 哇,太感谢了,明天我试试

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

CCCC150

没有介绍

关注 打赏
最新文章 热门文章
72
扫一下,分享更方便,购买更轻松