比这更好的方法是使用Python重命名文件

时间:2010-08-24 12:01:50

标签: python file-io

我是蟒蛇新手,我仍然在发现它的奇迹。

我写了一个重命名大量文件的脚本: 从 Edison_03-08-2010-05-02-00_PM.7z Edison_08-03-2010-05-02-00_PM.7z

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))

这样做会有更好/更优雅的方法吗?

2 个答案:

答案 0 :(得分:8)

datetime的{​​{3}}将为您完成大部分繁重工作:

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小时制)我应该使用%I(小时,12小时制),因为OP使用了AM / PM。这就是我的示例输出错误地包含AM而不是PM的原因。这一切现在都得到纠正。

答案 1 :(得分:3)

这个怎么样:

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

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