一意ではありませんこれは、十分に単純なようです。あなたは、ファイル名のリストを開始します。
l = ["hello1","hello2","hello3",
"hello","hello","hello"]
その後、あなたは重複が見つかった場合は1で末尾の番号をインクリメントし、ファイル名を終了するためにそれらを反復処理します。
result = {}
for fname in l:
orig = fname
i=1
while fname in result:
fname = orig + str(i)
i += 1
result[fname] = orig
これは、のような辞書を残す必要があります:あなたはその部分を削除することができ、重複した名前に原稿をマッピングする気にしない場合はもちろん
{"hello1": "hello1",
"hello2": "hello2",
"hello3": "hello3",
"hello": "hello",
"hello4": "hello",
"hello5": "hello"}
。
result = set()
for fname in l:
orig = fname
i=1
while fname in result:
fname = orig + str(i)
i += 1
result.add(fname)
後でリストが必要な場合は、そのままキャストしてください。
final = list(result)
ファイルを作成している場合、これはtempfile
モジュールが行うように設計された、まさにであることに注意してください。
import tempfile
l = ["hello1","hello2","hello3",
"hello","hello","hello"]
fs = [tempfile.NamedTemporaryFile(prefix=fname, delete=False, dir="/some/directory/") for fname in l]
これがうまくインクリメントファイル名を作成しませんが、彼らは独自の保証され、そしてNamedTemporaryFile.name
はあなたにファイル名を与えるもののfs
は、(オープン)ファイルオブジェクトではなく、名前のリストのリストになります。
@PRMoureuが修正されました。これは '['hello1'、 'hello1']'を '['hello1'、 'hello11']'に変換しますが、他のあまり明白でないエッジケースを壊さないように '['hello1'、 'hello2']'を生成します。 –
これはうまくいきました、うまくいきましたが、使用していないと思われました> _ < – citizen2077
@new_to_codingこれを使ってファイルを作成すると、編集をチェックアウトします。 –