2010-05-06 5 views
3

특정 조건이 충족 될 때까지 다음 출력을 얻으려고합니다. 내가 가진 그 그러나 문자열의 증가 숫자


fileCount = 0 
while (os.path.exists(dstPath)): 
    fileCount += 1 
    parts = os.path.splitext(dstPath) 
    dstPath = "%s_%d%s" % (parts[0], fileCount, parts[1]) 

이다 (당신이 원격으로 호출 할 수있는 경우)

 
test_1.jpg 
test_2.jpg 
.. 
test_50.jpg 

해결책은 ...이 다음과 같은 출력을 생성합니다.

test_1.jpg 
test_1_2.jpg 
test_1_2_3.jpg 
.....etc

질문 : 현재 위치의 번호를 변경하려면 어떻게합니까 (끝에 숫자를 추가하지 않고)?

ps. 나는 이것을 파일 이름 바꾸기 도구에 사용하고있다.


UPDATE : 아래 다양한 아이디어를 사용하여, 내가


dstPathfmt = "%s_%d%s" 
parts = os.path.splitext(dstPath) 
fileCount = 0 
while (os.path.exists(dstPath)): 
    fileCount += 1 
    dstPath = parts[0]+"_%d"%fileCount+parts[1] 

답변

1

그것은 "TEST_ %의 d.jpg"와 같은 dstPath 뭔가를 유지하는 아마 가장 쉬운 방법을 작동하는 루프를 발견하고, 단지 그것을 통과했습니다 다양한 수 :

dstPath = "test_%d.jpg" 
i = 1 
while os.path.exists(dstPath % i): 
    i += 1 
dstPath = dstPath % i # Final name 
+0

매우 흥미로운 아이디어 ... 그러나 파일 이름의 일부를 변경하여 원본을 반영 할 수있는 유연성이 필요합니다. 그러나 위의 알고리즘을 변경하여 아래에 답변과 답변을 약간 포함 시켰습니다. 해주기 dstPathfmt가 = "S_ % D % % S" 부품 = os.path.splitext (dstPath) fileCounter = 0 인 첫 번째 파일 "test.jpg를" 동안 (을 os.path 일치 #됐다. dstPath = part [0] + "_ % d"% fileCount + parts [1] – iform

1

인쇄 부분의 값 [0] 당신은 루프의 둘레에 갈 때마다 ... 난, 당신은 놀랄 수 있습니다 생각

+0

문제가 해결 된 것 같습니다. 내가 이동했습니다 . 부분 = os.path.splitext (dstPath) while 루프 외부에 있습니다. 이제 완벽하게 작동합니다. – iform

+0

예, Michael의 제안대로. 당신의 버전이 내가 바라지 않았던 이유를 이해합니까? – djna

+0

나는 각 루프가 실행될 때마다 dstPath가 변경 되었기 때문에 (이전 루프가 수정했기 때문에) 생각합니다. 외부로 이동하면 루프에 의해 변경되기 전에 dstPath가 사용됩니다. – iform

0

조건 os.path.exists(dstPath)이 동일한 이름이 변경된 파일과 여러 번 일치하는 것처럼 보입니다. 예를 들어, test.jpg의 이름을 test_1.jpg로 변경합니다. 그런 다음 test_1.jpg의 이름을 test_1_2.jpg 등으로 변경합니다.

관련 문제