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

Python 如何将文件重命名为文件名中的子字符串?,python,Python,我试图通过截断子字符串前后的单词来重命名包含子字符串“eposion.26”的目录中的文件 e、 g.《埃斯卡洛恩的愿景》第26集《永恒的爱》1080p.Dual.Audio.Bluray[BC6DDF99].mkv' 要查找的值将始终为集。##(##两位数字) 期望的结果:插曲26.mkv 当前结果:第26集.external.Love.1080p.Dual.Audio.Bluray[BC6DDF99].mkv' 我使用python删除了第一个n字符;但是,我不知道如何有效地隔离“第26集”

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

e、 g.《埃斯卡洛恩的愿景》第26集《永恒的爱》1080p.Dual.Audio.Bluray[BC6DDF99].mkv'

要查找的值将始终为集。##(##两位数字)

期望的结果:插曲26.mkv

当前结果:第26集.external.Love.1080p.Dual.Audio.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:])

如果你确定“插曲”后面有两个数字,那么你可以这样编码。否则,我担心你应该使用或得到你想要的

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

如果你确定“插曲”后面有两个数字,那么你可以这样编码。否则,我担心你应该使用或得到你想要的

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

如果文件名总是以句点分隔,则就足够了:

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.isporation.26[BC6DDF99].mkv

结果

Episode.26.mkv

如果文件名总是以句点分隔,则就足够了:

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.isporation.26[BC6DDF99].mkv

结果

Episode.26.mkv

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

代码
重新导入
导入操作系统
key=“插曲”
regexp=re.compile('.*%s\.(\d\d)。*\.(.+)'%key)
对于os.listdir(“.”)中的文件名:
match=regexp.match(文件名)
如果匹配:
插曲,文件_ext=match.group(1),match.group(2)
新建名称=键+插曲+'.+文件\u扩展
重命名(文件名,新名称)

这种方式更干净、更灵活。REs非常强大。让我知道这是否对您有效。

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

代码
重新导入
导入操作系统
key=“插曲”
regexp=re.compile('.*%s\.(\d\d)。*\.(.+)'%key)
对于os.listdir(“.”)中的文件名:
match=regexp.match(文件名)
如果匹配:
插曲,文件_ext=match.group(1),match.group(2)
新建名称=键+插曲+'.+文件\u扩展
重命名(文件名,新名称)

这种方式更干净、更灵活。REs非常强大。让我知道这是否对您有效。

在您的代码中,您可以使用搜索而不是匹配和删除。*在重新开始时

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)

在您的代码中,您可以使用搜索,而不是在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)