根据文件的创建时间和日期重命名文件

时间:2019-05-26 09:33:35

标签: python

我刚刚开始学习Python,并试图了解下面的代码出了什么问题。

出于测试目的,我想将50张图像重命名为Hour.Minute.Second_Year_Month_Day.jpg。下面的代码将执行,但是我将当前时间和日期作为文件名,而不是图像的创建日期。

我想念什么?我在读getctime适用于Windows和Mac birthtime,或者我在说废话(自从使用Mac以来就提起这个问题)


directory = './'
extensions = (['.jpg', '.jpeg', '.png']);

filelist = os.listdir( directory )

newfilesDictionary = {}

count = 0

for file in filelist:
    filename, extension = os.path.splitext(file)
    if ( extension in extensions ):
        create_time = os.path.getctime( file )
        format_time = datetime.datetime.fromtimestamp( create_time )
        format_time_string = format_time.strftime("%H.%M.%S_%Y-%m-%d")
        newfile = format_time_string + extension; 

        if ( newfile in newfilesDictionary.keys() ):
            index = newfilesDictionary[newfile] + 1;
            newfilesDictionary[newfile] = index; 
            newfile = format_time_string + '-' + str(index) + extension;
        else:
            newfilesDictionary[newfile] = 0; 

        os.rename( file, newfile );
        count = count + 1
        print( file.rjust(35) + '    =>    ' + newfile.ljust(35) )


print( 'All done. ' + str(count) + ' files are renamed. ')

2 个答案:

答案 0 :(得分:0)

在MacOS上,您应该尝试st_birthtime

os.stat(file).st_birthtime

请注意,您当前的代码在Windows上可以正常工作。

答案 1 :(得分:0)

已验证代码:-

import os
import datetime

directory = r'Dir_path'
extensions = (['.jpg', '.jpeg', '.png']);

filelist = os.listdir( directory )

newfilesDictionary = {}

count = 0

for file in filelist:
    filename, extension = os.path.splitext(file)
    if ( extension in extensions ):
        create_time = os.path.getctime( os.path.join(directory, file) )
        format_time = datetime.datetime.fromtimestamp( create_time )
        format_time_string = format_time.strftime("%H.%M.%S_%Y-%m-%d")
        newfile = format_time_string + extension;

        if ( newfile in newfilesDictionary.keys() ):
            index = newfilesDictionary[newfile] + 1;
            newfilesDictionary[newfile] = index;
            newfile = format_time_string + '-' + str(index) + extension;
        else:
            newfilesDictionary[newfile] = 0;

        os.rename( os.path.join(directory, file), os.path.join(directory, newfile))
        count = count + 1
        print( file.rjust(35) + '    =>    ' + newfile.ljust(35) )


print( 'All done. ' + str(count) + ' files are renamed. ')

您的代码在Windows操作系统上运行良好,只是通过添加os.path.join()进行了一点改进,使其在处理文件时更加灵活。如果您使用的是Mac,请尝试使用os.stat(file).st_birthtime代替os.path.getctime()

建议的改进:-

  • 您使用的时间戳结构不是最好的,因为 时间戳通常按持续时间的降序排列 即年>月>日>小时>分钟>秒。这个时间戳 通常使用标准(ISO 8601)
  • 您应通过lower()传递文件扩展名,以使 扩展全部小写。由于您的代码将无法处理图像 扩展名为.JPG.PNG的文件。