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

比这更好的方法是使用Python重命名文件,python,file-io,Python,File Io,我是python新手,仍在探索它的神奇之处 我编写了一个脚本,重命名了许多文件: 从爱迪生03-08-2010-05-02-00_PM.7z到爱迪生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: part

我是python新手,仍在探索它的神奇之处

我编写了一个脚本,重命名了许多文件: 从爱迪生03-08-2010-05-02-00_PM.7z爱迪生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))
这样做的更好/更优雅的方式是什么?

这个怎么样:

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

newfilename = '%s_%s-%s-%s' % (name, day, month, timestamp)
datetime
将为您完成大部分繁重的工作:

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)



编辑:最初我使用的是
%H
(小时,24小时时钟),我应该使用
%I
(小时,12小时时钟),因为OP使用AM/PM。这就是为什么我的示例输出错误地包含
AM
,而不是
PM
。现在一切都已更正。

您正在删除最后一部分。@Amoss:还有第一部分。因为这些都没有改变,所以它们对我来说并不重要;)这就是我要找的。我希望通过一些漂亮的字符串拆分来实现这一点,这就是您的代码所做的。谢谢美好的我相信这会派上用场的。谢谢乔恩·埃里克!
>>> print newfilename
Edison_08-03-2010-05-02-00_PM.7z