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

2024-09-21 00:18:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过截断子字符串前后的单词来重命名目录中包含子字符串“插曲.26”的文件

例如'的愿景.Escaflowne.第26集。永恒的爱0.1080便士。双音频Bluray[BC6DDF99].mkv'

要找到的值将始终是集。##(##两位数)

期望结果:第26集.mkv

当前结果:第26集。永恒的爱0.1080便士。双音频Bluray[BC6DDF99].mkv'

我用python删除了第一个n字符;但是,我不知道如何有效地隔离“第26集”

import os

key = "Episode."

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

Tags: key字符串in目录indexosfilename单词
3条回答

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

代码

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)

这样更干净,更灵活。REs非常强大。让我知道这是否对你有用。你知道吗

如果文件名总是用句点分隔,那么^{}就足够了:

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”)后分割名称,抓取事件编号并重命名文件;它还应该处理除句点外还包含空格的文件名,或者如果“插曲.26”位于字符串的末尾(例如Some.Movie.Episode.26 [BC6DDF99].mkv)。你知道吗

结果

Episode.26.mkv

如果你确定“插曲”后面有两个数字,那么你可以这样编码。否则,恐怕你应该用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

相关问题 更多 >

    热门问题