【问题标题】:How To Include "part#+.rar" In "Extensions如何在“扩展”中包含“part#+.rar”
【发布时间】:2026-01-15 07:10:02
【问题描述】:

所以我使用脚本将文件名拆分为“名称”和“扩展名”,这样我就可以对“名称”应用一系列规则并使用“名称”并让脚本在最后将所有内容重新组合在一起.

目前,我正在使用:

import os, shutil, re
def rename_file (original_filename):
    name, extension = os.path.splitext(original_filename)    
    name = re.sub(r"\'", r"", name) # etc...more of these...
    new_filename = name + extension
    try:
        # moves files or directories (recursively)
        shutil.move(original_filename, new_filename)
    except shutil.Error:
        print ("Couldn't rename file %(original_filename)s!" % locals())
[rename_file(f) for f in os.listdir('.') if not f.startswith('.')]

我的问题是 os.path.splitext() 包含“.partX.rar”的“.part(s)”作为文件名的一部分,而我希望它作为文件名的一部分包含在内文件扩展名。

我怎样才能获得执行此操作的脚本(没有“扩展”列表或完全独立的 rar 文件脚本)?

谢谢!

【问题讨论】:

  • 谢谢!对不起,我试图用箭头来表示赞赏(但还不能,因为我没有足够的代表,这看起来很奇怪)。感谢您引起我的注意(我的错!)! =D
  • 这就是 * 的工作方式,不接受答案是不礼貌的......但我可以看到你找到了处理它的方法。此外,您现在拥有投票所需的声誉:)
  • 是的,我只是不明白有一个“接受”与投票答案不同(老实说,我认为我还不能做不粗鲁的事情)。再次感谢! =D

标签: python naming


【解决方案1】:

os.path.splitext 反向搜索 '.'并返回它找到的第一个匹配项。所以开箱即用的 splitext 不会做你需要的。如果您只是使用它来标记文件名,我建议您自己通过拆分来解析文件名。以左侧为名称,然后重新加入右侧。

这是一种方法:

def split_name(file_name):
   '''
    Returns root_filename, 'middle tokens', and extension
   '''
   tokens = file_name.split('.')

   return (tokens[0], ".".join(tokens[1:-1]), tokens[-1]) if len(tokens) >1 else file_name

file_name = 'this.is.a.txt'
split_name(file_name)
#result is:
>>>  ('this', 'is.a', 'txt')

【讨论】:

  • 谢谢!对不起,我试图用箭头来表示赞赏(但还不能,因为我没有足够的代表,这看起来很奇怪)。感谢您引起我的注意(我的错!)! =D
  • 我正在寻找脚本要做的一件大事,我不能包含“.part”的原因之一是我希望删除所有的“。 "s 来自名称部分(这会弄乱部分 rars 的所有内容)。所以这个名字可能(起初)会包含很多“.”。
  • 很抱歉,我觉得大部分信息都在这里,但我不能完全适应我正在寻找的内容。\n
  • 对不起,我觉得信息大部分都在这里,但我不能完全适应我正在寻找的内容。对于文件名“This.File's.Name.Needs.To.Be.Changed.A.Lot.part001.rar”你的脚本会给我一个三重奏,为了漂亮的名字,我最终也会处理“。 ..part001”。只需更改数字,我就可以调整它以将最后两部分作为“扩展”,但我需要一些方法让它给我一个双重,最后一个是最后一个“.ext”,除非它是一个部分[无论如何number of numbers].rar,此时它将把最后两个(但仍然作为一个双)。
  • 所以如果“part0001”存在,你基本上想要最后两个?