2012-04-11 18 views
1

Google/StackOverflowでこのコードを調べるために誤った言葉を使用しているような気がします。Pythonに存在するファイルの名前を変更する

私は、(とりわけ)多くのファイルを動かす予定のスクリプトを作成しています。

現在、ファイル名が拡張子から分割され、ファイルがディレクトリに既に存在する場合は、Filename +(Duplicate)+ Extensionを追加するための小さな行があります。

しかし、基本的には(複製)、(複製2)、(複製3)などの基本的な機能を持つ簡単な1ライナーが必要ですファイルに現在の番号がある場合は番号を次の番号に変更します)。

私は自分自身を理解するにはあまりにも愚かなのですか?

申し訳ありませんが、私の現在のコードは人々が私の質問に答えるのに役立つかもしれません。

def destination(self, f): return os.path.abspath('.')+'/'+self.filename(f)+'/'+self.filename(f)+' (Duplicate)'+self.extension(f) if and os.path.isfile(os.path.abspath('.')+'/'+self.filename(f)+'/'+f) else os.path.abspath('.')+'/'+self.filename(f)+'/'+f 

私は、ファイル名と拡張子を(基本的にちょうどいくつかのrarの部品といくつかのフォルダの問題を回避するために)なって若干変更された方法を使用しました。しかし、 'self.filename(f)とself.extension(f)は基本的にはos.splittext(f)[0]とos.splittext(f)[1]です。

+2

あなたは既に持っている、簡単ではありません - 十分な解決策は何ですか? –

+0

@Robin Hood **ファイルの回転**はあなたが参照している用語かもしれません。 Pythonでは、[logging](http://docs.python.org/library/logging.html)モジュールがファイルのローテーションを設定するために使用されるため、ロギングモジュールによって処理されます。私は、ロギング(およびその結果のファイルローテーション)設定の設定に役立つ[this](http://stackoverflow.com/questions/4654915/rotate-logfiles-each-time-the-application-is-started-python)を見つけました。ファイル名を手動で名前を変更(または* rotate *)するには、* one *ライナーについては不明です。 –

+0

申し訳ありませんが私は明確でない場合は、問題は、私のソリューションは単純ではないことではない、それはちょうど私の解決策は、1つの重複を扱うことができると私はそれを2つ本質的に同じであるが、 'Duplicate 1'というコードの別のブロックを追加して、通常と 'Duplicate'の両方をチェックすることです - 完全にばかげて非常に長くて、どのくらいの人が私が追加することを決めたかによって制限されています。 –

答えて

4

もちろん、ですが、これを行うには1本のライナーが必要ですが、わかりやすいものはありません。私はこのような何かのために行くだろう:(。これは基本的にあなたがやったことかもしれませんが、あなたのコードを投稿していなかった)

def alternative_names(filename): 
    yield filename 
    base, ext = os.path.splitext(filename) 
    yield base + "(Duplicate)" + ext 
    for i in itertools.count(1): 
     yield base + "(Duplicate %i)" % i + ext 

target_name = next(alt_name 
        for alt_name in alternative_names(target_name) 
        if not os.path.exists(alt_name)) 

+0

美しい!ああ、イテレータを使用する必要があります:) –

+0

@Sven Marnach素敵なコードです。私の唯一の問題は、他の場所で呼び出すことができるコードにこれを入れる方法を理解することができず、 "健全性のチェック"ですパスがすでに存在する場合(つまり、ファイルがすでに適切な場所にある場合)、宛先が同じであることを確認するために、その用語を正しく使用しています。今すぐこのコードは、それが存在し、それを名前を変更することを見て.... –

+0

優れた例、ありがとう。 – Tamm