如何使用python脚本更改多个文件的创建日期?

2024-06-16 04:56:20 发布

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

当我把我的照片从ipad导入硬盘时,我错误地将它们导入了当天的创建日期

所以现在每张照片的真实日期是它的修改日期。我基本上使用这个命令来Setfile -d "$(GetFileInfo -m _FILE_PATH_)" _FILE_PATH_将我的照片的创建日期设置为修改日期。但我想知道是否有一种方法可以将此命令行放入python脚本中,在该脚本中我可以批量选择多张照片来执行此操作

此外,由于如果我打开任何照片,系统将更改其修改日期,因此我可以猜测某些照片属于哪个日期的唯一方法是按名称对其进行排序,以查看照片之前和之后属于哪个日期

关于如何编写脚本,根据之前和之后的照片推断出日期大于特定日期的照片的真实日期,有什么想法吗

例如,您在截图中看到,在10月5日的两张照片之间有一张5月8日的照片,因此很明显,它也应该在10月5日拍摄。 但不幸的是,有时照片前后的修改日期也是错误的,因此我认为程序必须寻找照片前后的最小日期来推断真实日期。 enter image description here

更新

我在python上编写了这段代码,当我将单个文件拖放到终端中,为程序提供路径时,它可以很好地处理这些文件。我想知道是否有一种方法可以做到这一点与多个文件

from subprocess import call
import os

path = input("enter filepath: ")
info = '"$(GetFileInfo -m '+ path + ')" '
command = 'Setfile -d ' + info + path
print('Setfile -d ' + info + path)
call(command, shell=True)

Tags: 文件path方法import程序info脚本错误
1条回答
网友
1楼 · 发布于 2024-06-16 04:56:20

不需要交互式输入可能是一个关键的改进,这样您就可以同时在大量文件上运行它。在Python中实现这一点的方法是使用sys.argv

另外,使用subprocess.check_call(或subprocess.check_output获取输出)而不是subprocess.call,这样可以避免调用shell,并检查子流程是否成功完成。(如果没有,将有一个回溯;如果您想要更用户友好的内容,请将其包装在try/except中。在发布另一个问题寻求帮助之前,可能会查找现有问题。)

from subprocess import check_output, check_call
from sys import argv

for path in argv[1:]:
    date = check_output(['GetFileInfo', '-m', path])
    check_call(['Setfile', '-d', date, path])

像这样使用它

python3 script.py file1.png /path/to/file2.png ../elsewhere/file3.png ...

(相对路径从当前工作目录开始解析;没有路径解析到当前目录。)

相关问题 更多 >