2013-07-18 3 views
0

저는 파이썬에서 몇 가지 어려움을 겪고 있습니다. 해당 고유 ID를 반환하고이 고유 ID가있는 폴더의 이름을 바꾸려면 파일 이름을 데이터베이스로 파싱하는 ArcGIS와 함께 사용하는 코드가 있습니다. 이전에는 훌륭하게 작동했지만 예기치 않은 ID가 이미 디렉토리에 존재하고 디렉토리에서 작업이 이미 완료된 경우와 같이 몇 가지 예외를 처리해야합니다. 고유 ID에는 모든 숫자가 포함되어 있으므로 다음과 같이 시도했습니다.Python : 중복 폴더 이름을 찾아 이름을 바꾸는 방법은 무엇입니까?

elif re.findall('[0-9]', fn): 
Roll = string.join(string, "1") 
print (Roll) 
    os.rename(os.path.join(basedir, fn), 
       os.path.join(basedir, Roll)) 

고유 ID가있는 모든 폴더를 반환합니다. 필자는 특정 폴더 이름이 디렉토리에서 발생하는 횟수를 계산하는 방법을 알아낼 수 없습니다.

+1

왜 개수가 필요합니까? 폴더 이름은 주어진 디렉토리에서 한 번만 존재할 수 있습니다. 'os.path.isdir()'또는'os.path.exists()'를 사용하십시오. – roippi

+0

죄송합니다. 폴더가 이미 존재하고 기존 스크립트가 동일한 이름을 출력하면 복제 이름을 "923449039"와 같이 새 이름으로 바꾸고 싶습니다. 따라서 두 번째 인스턴스는 "923449039_1"이됩니다 – GISKid

답변

0

나는 당신이 당신이 필요한 것보다 스스로 더 열심히이 길을 만들고, 그러나 당신의 즉각적인 질문에 대답하고 의심 "명명 알고리즘,하지만 어쩌면 그게 무슨 뜻인지 오해하고있어.

+0

기본적으로 누군가는 속성과 연결된 폴더의 디렉토리를 만들고 주소로 이름을 지정했습니다. 우리 조직에서 모든 것은 롤 번호 (Roll number)라는 고유 한 ID로 수행됩니다. 그래서 기본적으로 폴더 이름을 가져 와서 데이터베이스를 통해 롤을 얻고 그 폴더의 이름을 변경하지만 일부 복제본이있을 수 있습니다. – GISKid

+0

@GISKid 데이터베이스와 같은 사운드에는 몇 가지 고유 한 제약 조건이 필요합니다. – Keith

1

세트에 이름을 추가하고 세트에 있는지 확인하십시오.

+0

나는 theres 545 폴더를 사용했지만 오류가 발생했습니다 : 오류 정보 : : 포장하기에 너무 많은 값 더 많은 폴더를 처리 할 수있는 것이 있습니까? – GISKid

+0

기대하는 것보다 큰 튜플을 반환하고 있습니다. – Jiminion

+0

@GISKid 그건 완전히 관련이없는 오류입니다. 어디에서 코드를 표시 할 수 있습니까? – Keith

0

다음 중 하나를 수행 할 수 있습니다. 키가 폴더 이름이고 각 키와 연관된 값이 해당 이름의 발생 횟수 인 정수인 사전을 작성하십시오. 폴더를 처리 할 때마다 사전의 키/값을 적절히 업데이트하십시오. 세트에 모든 폴더 이름을 추가 한 후 사전의 모든 카운트 값을 확인하십시오. 카운트가 1보다 크면 중복 된 것을 알 수 있습니다.

이동 중에 중복을 감지해야하는 경우 키가 이미 존재하는지 확인하십시오. 이 경우 값을 전혀 필요로하지 않으며, dict 대신 집합이나 목록을 사용할 수 있습니다.

collections.Counter을 사용하면 도움이됩니다. this question에서 사용 예를 볼 수 있습니다. 이 예를 자신의 필요에 맞게 적용하는 것이 너무 어렵지 않아야합니다.

희망이 도움이됩니다. 당신은 이름 충돌을 얻는 경우

folder_name_to_create = 'whatever' 

if os.path.exists(folder_name_to_create): 
    folder_name_to_create += '_1' 

, 나는 당신이 당신의 "독특한 볼 필요가 의심 :

관련 문제