Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件创建日期&;重命名-请求评论_Python_File_Date_Rename_Creation - Fatal编程技术网

Python文件创建日期&;重命名-请求评论

Python文件创建日期&;重命名-请求评论,python,file,date,rename,creation,Python,File,Date,Rename,Creation,场景:当我拍摄一个物体时,我从多个角度拍摄多张图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:摄像头生成的图像标识为“DSCN100001”、“DSCN100002”等,不清楚 我编写了一个脚本,该脚本将提示输入目录规范(Windows)以及一个“前缀”。该脚本读取文件的创建日期和时间,并相应地重命名文件。前缀将添加到文件名的前面。因此,“DSCN100002.jpg”可以变成“FatMonkey 20110721 17:51:02”“.时间细节对我的年表来说很重要 剧本如下。请告诉我

场景:当我拍摄一个物体时,我从多个角度拍摄多张图像。乘以我“拍摄”的对象数量,我可以生成大量图像。问题:摄像头生成的图像标识为“DSCN100001”、“DSCN100002”等,不清楚

我编写了一个脚本,该脚本将提示输入目录规范(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")

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

您可以跳过
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到服务器上。令我沮丧的是,所有图像的修改时间都改为上传时间)是的。“让(计算机)做更多的工作……”一直是我的目标。基于精心选择的增量(我阅读了增量上的规范)对文件进行分组将大大有助于实现这一目标,并使宝贵的空闲时间变得更加可用。