如何解决此重命名重复问题,而无需使用像"_DUPLICATED_#NO"
之类的独特内容重命名,这些名称在完成后必须是唯一的,并且最好使用表示重复数量的迭代数字
from collections import defaultdict
l = ["hello1","hello2","hello3",
"hello","hello","hello"]
tally = defaultdict(lambda:-1)
for i in range(len(l)):
e = l[i]
tally[e] += 1
if tally[e] > 0:
e += str(tally[e])
l[i] = e
print (l)
结果:
['hello1', 'hello2', 'hello3', 'hello', 'hello1', 'hello2']
如您所见,名称不是唯一的
答案 0 :(得分:4)
这看起来很简单。首先是文件名列表:
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]
这不会创建很好的递增文件名,但它们保证唯一,fs
将是(打开)文件对象的列表而不是名称列表,尽管NamedTemporaryFile.name
会给你文件名。