2012-04-11 2 views
1

Google/StackOverflow에서 코드를 둘러보기 위해 잘못된 단어를 사용하고있는 것 같습니다.Python과 함께 존재하는 파일의 이름 바꾸기

저는 (다른 것들 중에서) 많은 파일을 움직이는 스크립트를 만들고 있습니다.

파일 이름을 확장자로 분리하고 파일이 디렉토리에 이미있는 경우 Filename + (Duplicate) + Extension을 추가하는 작은 행이 있습니다.

그러나 본질적으로 (복제), (복제 1), (복제 2), (복제 3) 등의 간단한 단일 라이너가 있어야합니다. 파일에 현재 번호가있는 경우 숫자를 다음 숫자로 변경).

나 자신을 알아 내기에 너무 어리 석다는 간단한 해결책은 무엇입니까?

죄송합니다. 내 현재 코드가 사람들이 내 질문에 대답하는 데 도움이 될 수 있다고 생각하지 않았습니다. 내가 파일 이름과 확장자를 (기본적으로 그냥 RAR 부품 및 일부 폴더 문제를 해결하기 위해) 얻기의 약간 변형 된 방법을 사용했습니다

def destination(self, f): return os.path.abspath('.')+'/'+self.filename(f)+'/'+self.filename(f)+' (Duplicate)'+self.extension(f) if and os.path.isfile(os.path.abspath('.')+'/'+self.filename(f)+'/'+f) else os.path.abspath('.')+'/'+self.filename(f)+'/'+f 

. 하지만 'self.filename (f)와 self.extension (f)는 기본적으로 os.splittext (f) [0]과 os.splittext (f) [1]입니다.

+2

당신이 이미 가지고 있지-간단한 충분한 해결책은 무엇인가? –

+0

@Robin Hood ** 파일 회전 **은 당신이 말하는 용어 일 수 있습니다. 파이썬에서는 [로깅] (http://docs.python.org/library/logging.html) 모듈을 사용하여 파일 순환을 설정하므로 로깅 모듈이이를 처리합니다. 로깅 (및 결과 파일 순환) 구성을 설정하는 데 도움이되는 [this] (http://stackoverflow.com/questions/4654915/rotate-logfiles-each-time-the-application-is-started-python)을 발견했습니다. 파일 이름을 수동으로 바꾸거나 (또는 ​​* rotate *) * one * 라이너에 대해 확신하지 못합니다. –

+0

내가 명확하지 않다면 미안합니다. 문제는 내 솔루션이 충분히 간단하지 않다는 것이 아닙니다. 단지 내 솔루션이 하나의 복제 만 처리 할 수 ​​있으며, 두 가지를 수행 할 수있는 유일한 방법입니다. 기본적으로 'Duplicate 1'과 동일한 코드 블록을 추가하고 정규 및 'Duplicate'를 모두 확인합니다. 완전히 우스꽝스럽고 매우 길고 본질적으로 끝날 수있는 코드를 확인합니다. 얼마나 많은 이들이 내가 추가하기로 결정했는지에 따라 제한됩니다. –

답변

4

물론 입니다. 한 줄짜리지만, 매우 읽기 쉽다고 생각하지 않습니다. I는 다음과 같이 가고 싶어 :

def alternative_names(filename): 
    yield filename 
    base, ext = os.path.splitext(filename) 
    yield base + "(Duplicate)" + ext 
    for i in itertools.count(1): 
     yield base + "(Duplicate %i)" % i + ext 

target_name = next(alt_name 
        for alt_name in alternative_names(target_name) 
        if not os.path.exists(alt_name)) 

(이 수도 기본적으로 당신이 한,하지만 당신은 당신의 코드를 게시하지 않았다 무엇을해야합니다.)

+0

아름다운! 아아, 반복기를 사용해야합니다 :) –

+0

@Sven Marnach 멋진 코드, 내 유일한 문제는 다른 곳에서 호출 할 수있는 코드에이 코드를 삽입하는 방법을 알아 내지 못합니다. 해당 단어를 올바르게 사용하고있는 경우) 경로가 이미 존재하면 (즉, 파일이 이미 올바른 위치에있는 경우) 목적지가 동일해야합니다. 지금이 코드는 그것이 존재하고 그것을 이름을 바꾸는 것을 본다. –

+0

훌륭한 예제, 고마워. – Tamm

관련 문제