如何将文件重命名为文件名中的子字符串?

时间:2018-12-29 04:37:17

标签: python

我试图通过截断子字符串之前和之后的单词来重命名目录中具有子字符串“ Episode.26”的文件

例如'Escaflowne的视觉第26集。Eternal.Love.1080p.Dual.Audio.Bluray[BC6DDF99] .mkv'

要找到的值将始终为 Episode。## (##个两位数字)

所需结果: Episode.26.mkv

当前结果:第26集。Eternal.Love.1080p.Dual.Audio.Bluray[BC6DDF99] .mkv '

我使用python删除了前 n 个字符;但是,我不知道如何有效地隔离“ Episode.26”

import os

key = "Episode."

for filename in os.listdir("."):
  if(key in filename):
    index = filename.index(key)
    os.rename(filename, filename[index:])

4 个答案:

答案 0 :(得分:2)

如果您确定在“情节”之后有两位数字,那么您可以像这样进行编码。否则,恐怕您应该使用resplit来获取想要的东西。

import os

key = 'Episode'
for filename in os.listdir("."):
    try:
        index = filename.index(key)
        _, file_extension = os.path.splitext(filename)
        new_name = filename[index:index+len(key)+3] + file_extension
        os.rename(filename, new_name)
    except ValueError:
        pass

答案 1 :(得分:2)

如果文件名始终用句点分隔,则 split() 可能就足够了:

import os

ext = ".mkv"
ndl = "Episode"

for filename in os.listdir("."):
    if ext in filename and ndl in filename:
        num = filename.split(ndl, 1)[1].split(" ")[0].split(".")[1]
        epi = "{}.{}{}".format(ndl, num, ext)
        os.rename(filename, epi)

这应该在您的针头(“ ndl”)抓住剧集编号并重命名文件之后拆分名称;它也应该处理文件名,文件名中除了句点外还包含空格,或者如果“ Episode.26”位于字符串的末尾(例如Some.Movie.Episode.26 [BC6DDF99].mkv)。

结果

Episode.26.mkv

答案 2 :(得分:1)

您可以使用正则表达式,捕获情节编号和文件扩展名,并使用以下数据创建新名称:

代码

import re
import os

key = "Episode"
regexp = re.compile('.*%s\.(\d\d).*\.(.+)' % key)

for filename in os.listdir("."):
  match = regexp.match(filename)

  if match:
    episode, file_ext = match.group(1), match.group(2)
    new_name = key + episode + '.' + file_ext

    os.rename(filename, new_name)

这种方式更加干净灵活。 RE非常强大。让我知道这是否对您有用。

答案 3 :(得分:1)

在您的代码中,您可以使用搜索而不是match并在re的开头删除。*

import re
import os

key = "Episode"
regexp = re.compile('%s\.(\d\d).*\.(.+)' % key)

for filename in os.listdir("."):
  match = regexp.search(filename)

  if match:
    episode, file_ext = match.group(1), match.group(2)
    new_name = key + episode + '.' + file_ext

    os.rename(filename, new_name)