场景:当我拍摄物体时,我会从多个角度拍摄多张图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:相机会生成标识为“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")
答案 0 :(得分:7)
你正在做的事情看起来像Pythonic。一些替代方案(不一定是建议):
您可以跳过os.chdir(target)
并在循环中执行os.path.join(target, filename)
。
您可以执行strftime('{0}-%Y-%m-%d-%H:%M:%S.jpg'.format(prefix))
以避免字符串连接。这是我唯一推荐的。
您可以重复使用temp_date
之类的变量名称,而不是t
,v
和x
。这没关系。
您可以跳过存储临时变量,只需执行以下操作:
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)
您的代码很简单。我可以提出几点可能的改进:
modify time
,同时保留EXIF信息。以下是关于Python的EXIF库的讨论:Exif manipulation library for python 答案 2 :(得分:2)
我唯一想到的是,如果你打算让电脑为你工作,那就让它做更多的工作。我的假设是你要多次射击一个物体,然后移动到另一个物体或移动另一个物体到位。如果是这样,您可以考虑按照时间戳的接近程度对照片进行分组(可能任何超过2分钟的增量都被视为新对象)。然后根据这些伪聚类,您可以按对象命名照片。
可能不是你想要的,但我想加上这个建议。