2012-03-19 72 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