2012-03-19 47 views
1

所以我使用脚本文件名拆分成‘名’和‘扩展’这样我就可以再申请了一堆的规则和玩了”命名“并有脚本把一切重新走到一起,在年底如何包括“部分#+。RAR”在“扩展

目前,我使用的是:

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()包括”的。第二部分(S).partX.rar“的””作为文件名,而我想它的一部分被列入作为文件扩展名的一部分。

我怎样才能获得的T他脚本来做到这一点(没有“扩展名”列表或rar文件的完全独立的脚本)?

谢谢!

+0

谢谢!对不起,我试图用箭来表示appreaciation(但还不能,因为我没有足够的代表,这似乎很奇怪)。感谢您将此引入我的注意(我的坏!)! = D – 2012-03-19 13:13:30

+0

这就是Stackoverflow的工作原理,不接受答案是粗鲁的......但我可以看到你找到了处理它的方法。此外,你现在需要声望upvote :) – JMax 2012-03-19 13:28:30

+0

是的,我只是不明白,有一个“接受”,是不同的投票答案了(我真的认为我不能做非 - 粗鲁的事情呢)。再次感谢! = D – 2012-03-19 13:34:39

回答

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

谢谢!对不起,我试图用箭来表示appreaciation(但还不能,因为我没有足够的代表,这似乎很奇怪)。感谢您将此引入我的注意(我的坏!)! = D – 2012-03-19 13:13:41

+0

我正在寻找脚本的一件大事情,其中​​一个原因是我不能拥有“.part”,其中一个原因是我希望从名称中删除所有“。”部分(这可以将rars的各个部分混淆)。所以这个名字可能会(首先)包含很多“。”。 – 2012-03-19 13:42:53

+0

对不起,我觉得像信息大多是在这里,但我不能完全适应这就是我要找的。\ n – 2012-03-19 14:44:20