我刚刚开始学习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. ')
答案 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()
。
建议的改进:-
lower()
传递文件扩展名,以使
扩展全部小写。由于您的代码将无法处理图像
扩展名为.JPG
或.PNG
的文件。