如何在“扩展名”中包含“part#+。rar”

时间:2012-03-19 13:01:54

标签: 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...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文件的完全独立的脚本)?

谢谢!

1 个答案:

答案 0 :(得分:2)

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')