Python文件创建日期&重命名 - 要求批评

时间:2011-07-21 15:49:46

标签: python file date rename creation

场景:当我拍摄物体时,我会从多个角度拍摄多张图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:相机会生成标识为“DSCN100001”,“DSCN100002”等的图像.Cryptic。

我整理了一个脚本,它将提示目录规范(Windows),以及“前缀”。该脚本读取文件的创建日期和时间,并相应地重命名该文件。前缀将添加到文件名的前面。所以,'DSCN100002.jpg'可以成为“FatMonkey 20110721 17:51:02”。时间细节对我来说对于年表来说很重要。

脚本如下。请告诉我它是否是Pythonic,是否写得不好,当然,是否有更清洁 - 更有效的方法。谢谢。

   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 个答案:

答案 0 :(得分:7)

你正在做的事情看起来像Pythonic。一些替代方案(不一定是建议):

您可以跳过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

形式的文件

答案 1 :(得分:3)

您的代码很简单。我可以提出几点可能的改进:

    由于TAB的自动归纳,
  1. Command line arguments更适合目录名称
  2. EXIF是照片制作日期和时间的更准确来源。如果您在图像编辑器中修改照片,则会更改modify time,同时保留EXIF信息。以下是关于Python的EXIF库的讨论:Exif manipulation library for python

答案 2 :(得分:2)

我唯一想到的是,如果你打算让电脑为你工作,那就让它做更多的工作。我的假设是你要多次射击一个物体,然后移动到另一个物体或移动另一个物体到位。如果是这样,您可以考虑按照时间戳的接近程度对照片进行分组(可能任何超过2分钟的增量都被视为新对象)。然后根据这些伪聚类,您可以按对象命名照片。

可能不是你想要的,但我想加上这个建议。

相关问题