Python 如何包括;第&x2B;部分;。rar";在;扩展

Python 如何包括;第&x2B;部分;。rar";在;扩展,python,naming,Python,Naming,因此,我使用一个脚本将文件名分为“名称”和“扩展名”,这样我就可以对“名称”应用一系列规则,并对其进行处理,最后让脚本将所有内容重新组合在一起 目前,我正在使用: import os, shutil, re def rename_file (original_filename): name, extension = os.path.splitext(original_filename) name = re.sub(r"\'", r"", name) # etc...mor

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

目前,我正在使用:

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”的“部分”作为文件名的一部分,而我希望将其作为文件扩展名的一部分

我怎样才能让脚本实现这一点(没有“扩展名”列表或rar文件的完全独立的脚本)


谢谢

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


谢谢很抱歉,我试图用箭头表示同情(但还不能,因为我没有足够的代表,这看起来很奇怪)。谢谢你引起我的注意(我的坏!)=这就是Stackoverflow的工作原理,不接受答案是不礼貌的。。。但我可以看出你找到了解决的办法。此外,你现在有了提升投票所需的声誉:)是的,我只是不明白有一种“接受”与投票支持答案不同(我真的认为我还不能做不粗鲁的事情)。再次感谢=汉克斯!很抱歉,我试图用箭头表示同情(但还不能,因为我没有足够的代表,这看起来很奇怪)。谢谢你引起我的注意(我的坏!)=完成了我期待脚本完成的重要事情,我不能包含“.part”的原因之一是我希望删除名称部分中的所有“.s”(这会把RAR部分的所有内容都搞乱)。因此,名称可能(起初)包含很多“.”s。对不起,我觉得信息主要在这里,但我不能完全适应我所寻找的。\n对不起,我觉得信息主要在这里,但我不能完全适应我所寻找的。对于文件名“This.File's.Name.Needs.To.Be.Changed.a.Lot.part001.rar”,您的脚本会给我一个truple,为了修饰名称,我也会处理“…part001”。只要改变数字,我就可以调整它,将最后两个部分作为“扩展”,但我需要某种方法让它给我一个双工,最后一个是最后一个“.ext”,除非它是一个部分[无论数字的数量如何].rar,在这一点上,它会将最后两个部分(但仍然是双工)。因此,如果“part0001”,基本上你想要最后两个“存在吗?
file_name = 'this.is.a.txt'
split_name(file_name)
#result is:
>>>  ('this', 'is.a', 'txt')