使用Python重命名文件

时间:2013-01-02 01:22:32

标签: python file operating-system file-rename

我正在尝试使用python重命名具有此命名约定的Windows目录中的1000多个文件:

The.Woman.In.Black.2012.720p.BluRay.x264

所需的命名惯例为: The Woman In Black {2012}

我需要的唯一重要的事情是标题和日期....

我尝试使用不同的字符串操作变体,但我没有到达任何地方。我需要帮助才能开始。

我知道我应该使用os模块重命名文件,但是我应该尝试使用哪个程序来执行此任务?

非常感谢任何帮助。感谢。

4 个答案:

答案 0 :(得分:3)

filename = 'The.Woman.In.Black.2012.720p.BluRay.x264'

# using regular expressions
import re
title, year = re.match('(.*?)\.(\d{4})\.720p\.BluRay\.x264', filename).groups()

# simpler regular expression, matching any format specifiers
title, year = re.match('(.+)\.(\d{4})\.', filename).groups()

# using simple string manipulation if the suffix is always the same
title, year = filename[:-22], filename[-21:-17]

# normalize title
title = title.replace('.', ' ')

# build new filename
print('%s {%s}' % (title, year)) # The Woman In Black {2012}

要重命名文件,请使用os.rename;要遍历目录,请使用glob.globos.walk

答案 1 :(得分:1)

看起来你的标题的一般格式是:

name.name.name.name.name.date.resolution.format.codec

在这种情况下我会这样做(未经测试):

import os

TARGET_DIR = r'/path/to/movies/'

for old_title in os.listdir(TARGET_DIR + '*'):
    words = old_title.split('.')
    date = words[-4]
    name = ' '.join(words[:-4])
    new_title = '%s {%s}' % (name, date)
    old_title = os.path.join(TARGET_DIR, old_title)
    new_title = os.path.join(TARGET_DIR, new_title)
    os.rename(old_title, new_title)

答案 2 :(得分:0)

如果原始命名约定一致,您可以{'上的原始文件名字符串split。字符,然后查找有效年份,添加大括号,并join将其与所有前面的标记一起形成新名称。

有关如何使用python重命名文件,请参阅this question

答案 3 :(得分:0)

def change_filename(name):
    filename = name.split('.')
    wordlist = filename[:-4]
    extension = '.' + filename[-1]
    wordlist[-1] = '{' + wordlist[-1] + '}'
    os.rename(name, ' '.join(wordlist) + extension)

此功能应该完全符合您的要求,您只需要输入名称即可。

注意:您可能希望在文件名上添加文件扩展名,否则它可能会变得很糟糕。

如果你在同一个文件上多次运行它,你会得到一个用大括号重载的文件,你不需要它,所以这里是一个反转函数:

def filename_cleanup(name):
    filename = name.replace('{', '').replace('}', '')
    wordlist = filename.split(' ')
    extension = '.' + wordlist.pop()
    wordlist[-1] = '{' + wordlist[-1] + '}'
    os.rename(name, ' '.join(wordlist) + extension)

那应该再给你一个合适的文件名。