Python文件创建日期&;重命名-请求评论
场景:当我拍摄一个物体时,我从多个角度拍摄多张图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:摄像头生成的图像标识为“DSCN100001”、“DSCN100002”等,不清楚 我编写了一个脚本,该脚本将提示输入目录规范(Windows)以及一个“前缀”。该脚本读取文件的创建日期和时间,并相应地重命名文件。前缀将添加到文件名的前面。因此,“DSCN100002.jpg”可以变成“FatMonkey 20110721 17:51:02”“.时间细节对我的年表来说很重要 剧本如下。请告诉我它是否是Pythonic,它是否写得很糟糕,当然,是否有一种更干净、更有效的方法。多谢各位Python文件创建日期&;重命名-请求评论,python,file,date,rename,creation,Python,File,Date,Rename,Creation,场景:当我拍摄一个物体时,我从多个角度拍摄多张图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:摄像头生成的图像标识为“DSCN100001”、“DSCN100002”等,不清楚 我编写了一个脚本,该脚本将提示输入目录规范(Windows)以及一个“前缀”。该脚本读取文件的创建日期和时间,并相应地重命名文件。前缀将添加到文件名的前面。因此,“DSCN100002.jpg”可以变成“FatMonkey 20110721 17:51:02”“.时间细节对我的年表来说很重要 剧本如下。请告诉我
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")
你这样做看起来像蟒蛇。一些备选方案(不一定是建议): 您可以跳过
os.chdir(target)
并在循环中执行os.path.join(target,filename)
您可以执行strftime('{0}-%Y-%m-%d-%H:%m:%S.jpg'.format(prefix))
以避免字符串连接。这是我唯一推荐的
您可以重用变量名,如temp\u 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
s
您可以确保您只重命名了格式为
DSCN1#####.jpeg的文件。您的代码既漂亮又简单。我可以提出一些可能的改进建议:
对于目录名更可取,因为按制表符自动编译
EXIF是照片创建日期和时间的更准确来源。如果在图像编辑器中修改照片,修改时间
将更改,而EXIF信息将保留。下面是关于Python的EXIF库的讨论:
我唯一的想法是,如果你想让计算机为你做这项工作,让它做更多的工作。我的假设是,你要拍摄一个物体几次,然后要么移动到另一个物体,要么移动到另一个物体的位置。如果是这样的话,你可以考虑按时间戳是如何紧密组合在一起的照片(也许超过2分钟的任何增量都被认为是一个新的对象)。然后基于这些伪簇,您可以按对象命名照片
可能不是您想要的,但我想我会添加建议。非常有用的建议。在阅读了一些文档之后,我认为pyexiv2是一个不错的选择。(我最近用FileZilla将一堆图像FTP到服务器上。令我沮丧的是,所有图像的修改时间都改为上传时间)是的。“让(计算机)做更多的工作……”一直是我的目标。基于精心选择的增量(我阅读了增量上的规范)对文件进行分组将大大有助于实现这一目标,并使宝贵的空闲时间变得更加可用。