2010-08-24 56 views
3

我是蟒蛇新手,我仍然发现它的奇迹。从 Edison_03-08-2010-05-02-00_PM.7zEdison_08-03-2010-05-02-00_PM.7z更好的方式,比这个,使用Python重命名文件

我写了一个脚本,重命名多个文件

03-08 -2010” 更改为 “08-03 -2010”

的脚本是:

import os, os.path 
location = "D:/codebase/_Backups" 
files = os.listdir(location) 

for oldfilename in files: 
    parts = oldfilename.split("_")  
    dateparts = parts[1].split("-") 

    newfilename = parts[0] + "_" + dateparts[1] + "-" + dateparts[0] + "-" + dateparts[2] + "-" + parts[2] + "_" + parts[3] 

    print oldfilename + " : " + newfilename 
    os.rename(os.path.join(location, oldfilename), os.path.join(location, newfilename)) 

什么是更好/更优雅的做法?

回答

3

如何:

name, timestamp = oldfilename.split('_', 1) 
day, month, timestamp = timestamp.split('-', 2) 

newfilename = '%s_%s-%s-%s' % (name, day, month, timestamp) 
+0

您正在放弃最后一部分。 – Amoss 2010-08-24 12:16:31

+0

@Amoss:和第一部分。由于这些都没有改变,他们对我来说似乎并不重要;) – Wolph 2010-08-24 13:06:07

+0

这就是我一直在寻找的东西。我想通过一些漂亮的字符串拆分来完成这是你的代码所做的。谢谢 ! – 2010-08-26 06:01:59

8

datetimestrptime (parse time string) and strftime (format time string)会做最繁重的工作适合你:

import datetime 

_IN_FORMAT = 'Edison_%d-%m-%Y-%I-%M-%S_%p.7z' 
_OUT_FORMAT = 'Edison_%m-%d-%Y-%I-%M-%S_%p.7z' 

oldfilename = 'Edison_03-08-2010-05-02-00_PM.7z' 

# Parse to datetime. 
dt = datetime.datetime.strptime(oldfilename, _IN_FORMAT) 

# Format to new format. 
newfilename = dt.strftime(_OUT_FORMAT) 

>>> print newfilename 
Edison_08-03-2010-05-02-00_PM.7z 

编辑:我原来是使用%H(小时,24小时制)因为OP使用AM/PM,本应该使用%I(小时,12小时制)。这就是为什么我的示例输出错误地包含AM而不是PM。现在全部更正了。

+0

不错!我相信这会派上用场。谢谢Jon-Eric! – 2010-08-26 06:00:58