Лучше, чем это, переименовать файлы с помощью Python - PullRequest
3 голосов
/ 24 августа 2010

Я новичок в Python и все еще открываю для себя его чудеса.

Я написал скрипт, который переименовывает несколько файлов: из Edison_03-08-2010-05-02-00_PM.7z to 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 ]

8 голосов
/ 24 августа 2010

datetime s strptime (строка времени разбора) и strftime (строка времени формата) сделает большую часть тяжелой работы за вас:

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. Теперь все исправлено.

3 голосов
/ 24 августа 2010

Как насчет этого:

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

newfilename = '%s_%s-%s-%s' % (name, day, month, timestamp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...