Python文件创建日期和Critiqu的重命名请求

2024-10-04 03:18:24 发布

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

场景:当我拍摄一个物体时,我会从多个角度拍摄多个图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:摄像头生成的图像标识为“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")

Tags: 文件图像import脚本targetinputdatetimeprefix
3条回答

你的代码既漂亮又简单。我可以提出一些改进建议:

  1. Command line arguments对于dir名称更可取,因为它是按制表符自动压缩的
  2. EXIF是更精确的照片创建日期和时间来源。如果在图像编辑器中修改照片,modify time将被更改,而EXIF信息将被保留。下面是关于Python的EXIF库的讨论:Exif manipulation library for python

你这样做看起来像Python。一些备选方案(不一定是建议):

您可以跳过os.chdir(target)并在循环中执行os.path.join(target, filename)。在

您可以做strftime('{0}-%Y-%m-%d-%H:%M:%S.jpg'.format(prefix))来避免字符串连接。这是我唯一能想到的。在

您可以重用一个变量名,比如temp_date,而不是tv,和{}。这样就可以了。在

您可以跳过存储临时变量,只需执行以下操作:

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()将函数泛化为递归目录。在

您可以检测文件的文件扩展名,这样它不仅对.jpegs是正确的

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

我唯一的想法是,如果你想让电脑为你做工作,让它做更多的工作。我的假设是你要对一个物体射击几次,然后要么移动到另一个物体上,要么把另一个物体移到原地。如果是这样的话,你可以考虑根据时间戳在一起的距离对照片进行分组(也许任何超过2分钟的增量都被认为是一个新对象)。然后根据这些伪簇,可以按对象命名照片。在

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

相关问题 更多 >