2012-03-22 4 views
0

私は、ファイル名と拡張子を持つ2つ組を返すスクリプトを開発して、ファイル名を変更できるようにしたいと考えています(大文字、点、ダッシュなどを削除します)。名前を付け加えて、拡張機能を追加して(GUIを使ってこれを何かに投げ込むことを望んでいるところもある)良いものにしてください。"Part [Digits] .rar"がファイル名に存在する場合

これを実行する最良の方法はわかりませんが、ファイル名が "part [任意の桁数]で終わらない限り、拡張子(最後の.ext) 1から任意の数の0の任意の数] .rar "それは最後の2つの部分を"拡張子 "として取ります。

私はこの特定の方法論に設定されていません。しかし、私はそれを現在のスクリプトに統合する必要があります(他のすべてのスクリプトと同じスクリプトに統合する必要があります)。そして、私には二重の名前のextペアが必要です。

私の現在のコード:

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('.')] 

がどのように私は「EXT」の一環として、代わりの名前の一部として.rarを持つこのプット「の部分[数字]」を作るのですか?

+0

質問はどこですか? – bos

+0

名前の代わりに "part [digits]"を拡張子に追加するにはどうすればいいですか? –

答えて

1

あなたが代わりにsplitextを使用しての正規表現でそれを行うことができます。たとえば、

m = re.search(r'(.*?)((part\[\d+\])?\.rar)', original_filename) 
name, ext = m.groups()[:2] 

ので:

>>> m = re.search(r'(.*?)((part\[\d+\])?\.rar)', 'name_part[23].rar') 
>>> m.groups()[:2] 
('name_', 'part[23].rar') 

それとも

>>> m = re.search(r'(.*?)((part\[\d+\])?\.rar)', 'name_no_parts.rar') 
>>> m.groups()[:2] 
('name_no_parts', '.rar') 

これは拡張であることを前提としてい実際には.rarです。しかし、これが当てはまらない場合、正規表現を微調整するのは簡単です。

+0

ありがとうございます。しかし、すべての拡張機能で動作するように調整する方法を教えてください。 –

+0

"rar"を "。*"に変更するだけです。まだ失敗するコーナーケースがいくつかあります(ファイル名が ".rar"の場合はどうなりますか?)。しかし、対処方法や必要があれば決める必要があります。これはおそらく個人用のユーティリティスクリプトのように見えます。この場合、コーナーケースは問題ではないかもしれません。 – aquavitae

+0

正規表現のヘルプについてはhttp://docs.python.org/library/re.htmlを読むことをお勧めします。 – aquavitae