Python 文件创建日期与重命名 - 请求反馈

6 投票
3 回答
5598 浏览
提问于 2025-04-16 22:00

场景:当我拍摄一个物体时,我会从多个角度拍摄多张图片。再加上我拍摄的物体数量,这样就会产生很多图片。问题是:相机生成的图片名称像是“DSCN100001”、“DSCN100002”等等,听起来很复杂。

我写了一个脚本,可以让用户指定文件夹(在Windows系统上),还可以输入一个“前缀”。这个脚本会读取文件的创建日期和时间,然后根据这些信息来重命名文件。前缀会加在文件名的前面。所以,“DSCN100002.jpg”可以变成“FatMonkey 20110721 17:51:02”。时间信息对我来说很重要,因为我需要按时间顺序来整理。

下面是这个脚本。请告诉我它是否符合Python的编程风格,是否写得不好,当然,如果有更简洁、更高效的方法来实现这个功能,也请告诉我。谢谢。

   import os
   import datetime
   target = raw_input('Enter full directory path: ')
   prefix = raw_input('Enter prefix: ')
   os.chdir(target)
   allfiles = os.listdir(target)
   for filename in allfiles:
        t = os.path.getmtime(filename)
        v = datetime.datetime.fromtimestamp(t)
        x = v.strftime('%Y%m%d-%H%M%S')
        os.rename(filename, prefix + x +".jpg")

3 个回答

3

我想说的是,如果你要让电脑帮你做事情,那就让它多做点。我的想法是,你可能会对一个物体拍很多次照片,然后再去拍另一个物体,或者把另一个物体移到拍摄位置。如果是这样的话,你可以考虑根据照片的时间戳来把照片分组,比如说如果时间差超过2分钟,就认为是拍了一个新物体。然后,基于这些大致的分组,你可以给照片起个名字,按物体来命名。

这可能不是你想要的答案,但我觉得这个建议还是可以提出来。

3

你的代码写得很好,很简单。我可以给你一些改进的建议:

  1. 使用命令行参数来处理目录名称会更好,因为这样可以通过按TAB键来自动补全。
  2. EXIF信息是照片创建日期和时间的更准确来源。如果你在图像编辑器中修改了照片,修改时间会被改变,但EXIF信息会保留。这里有关于Python中EXIF库的讨论:Python的EXIF处理库
10

你现在的做法看起来很符合Python的风格。这里有几个其他的选择(不一定是建议):

你可以不使用 os.chdir(target),而是在循环中直接使用 os.path.join(target, filename)

你可以用 strftime('{0}-%Y-%m-%d-%H:%M:%S.jpg'.format(prefix)) 来避免字符串拼接。我觉得这个方法是最值得推荐的。

你可以重复使用一个变量名,比如用 temp_date 代替 tvx。这样也是可以的。

你可以不存储临时变量,直接这样做:

for filename in os.listdir(target):
    os.rename(filename, datetime.fromtimestamp(
                         os.path.getmtime(filename)).strftime(
                          '{0}-%Y-%m-%d-%H:%M:%S.jpeg'.format(prefix)))

你可以通过使用 os.walk() 来让你的函数支持递归目录。

你可以检测文件的扩展名,这样不仅仅适用于 .jpeg 文件。

你可以确保只重命名格式为 DSCN1#####.jpeg 的文件。

撰写回答