Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용하여 파일 이름을 고유하게 만드는 프로그램

<시간/>

이름이라는 n개의 문자열 배열이 있다고 가정합니다. i번째 분에 이름이 [i]인 디렉토리를 생성할 수 있도록 파일 시스템에 n개의 디렉토리를 만들어야 합니다. 두 파일은 같은 이름을 가질 수 없습니다. 중복 디렉토리 이름을 입력하면 시스템은 (k) 형식으로 이름에 접미사를 추가합니다. 여기서 k는 얻은 이름이 고유하게 유지되도록 하는 가장 작은 양의 정수입니다. 길이가 n인 문자열 배열을 찾아야 합니다. 여기서 ans[i]는 생성할 때 i번째 디렉토리에 할당할 실제 이름입니다.

따라서 입력이 이름 =["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]와 같으면 출력은 ['my_dir', 'my_dir(1)'이 됩니다. , 'my_new_dir', 'my_new_dir(1)', 'abc'] "my_new_dir"이 이미 한 번 존재하고 첫 번째 것 다음에 하나(1)가 추가되기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • dic :=새 맵, 일부 키가 없으면 0을 반환

  • res :=새 목록

  • 이름의 각 이름에 대해 수행

    • 이름이 dic에 없으면

      • 딕[이름] :=딕[이름] + 1

      • res의 끝에 이름 삽입

    • 그렇지 않으면

      • newname :=이름 연결 '(' 연결 dic[이름] 연결 ')'

      • newname이 dic에 있는 동안 do

        • 딕[이름] :=딕[이름] + 1

        • newname :=이름 연결 '(' 연결 dic[이름] 연결 ')'

      • dic[새 이름] :=1

      • res의 끝에 newname 삽입

  • 반환 해상도

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

from collections import defaultdict
def solve(names):
   dic = defaultdict(int)
   res = []
   for name in names:
      if name not in dic:
         dic[name] += 1
         res.append(name)
      else:
         newname = name +'(' + str(dic[name]) + ')'
         while newname in dic:
            dic[name] += 1
            newname = name +'(' + str(dic[name]) + ')'
         dic[newname] = 1
         res.append(newname)
   return res
names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
print(solve(names))

입력

["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]

출력

['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']