2

そのため、おそらく間違った言葉を使用して、Google/StackOverflow でこのコードを探し回っているように感じます。

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

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

ただし、基本的に (Duplicate)、(Duplicate 1)、(Duplicate 2)、(Duplicate 3) などを実行する単純な小さなワンライナーが必要であると感じています (基本的には、2 番目の番号を次の番号に変更するだけです)。現在のファイルと一緒にファイルが存在する場合は番号)。

私は愚かすぎて自分自身を理解できないので、簡単な解決策は何ですか?

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

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] です。

4

1 に答える 1

5

もちろん、これを行うためのワンライナーいくつかありますが、非常に読みやすいものは思いつきません。私は次のようなものに行きます:

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

(これは基本的にあなたがしたことかもしれませんが、コードを投稿していません。)

于 2012-04-11T14:15:43.357 に答える