2016-08-16 2 views
3

파이썬에 내 훈련이 진행되고 나는 현재 루트 및 확장의이 종류가 순차적으로 여러 파일의 이름을 변경하기 위해 노력하고있어 :이름 바꾸기 여러 파일을 순차적으로 파이썬

Ite_1_0001.eps

Ite_2_0001.eps

Ite_3_0001.eps 그러나

Ite_4_0001.eps

, 나는 다음과 같이 모든 파일의 이름을 변경하기 위해 노력하고있어 :

Ite_0001.eps

Ite_0002.eps

Ite_0003.eps

Ite_0004.eps

그래서 이런 식으로 진행 해요 :

for path, subdirs, files in os.walk(newpath): 
    num = len(os.listdir(newpath)) 
    for filename in files: 
     basename, extension = os.path.splitext(filename) 
     for x in range(1, num+1): 
      new_filename = '_%04d' % x + extension 
     os.rename(os.path.join(newpath, filename), os.path.join(newpath, new_filename)) 

그것은 아니다 모든 파일이 디렉토리에서 지워지기 때문에 그리고 스크립트를 한 번 실행하면 나는이이 시간을 T : 그래서 _00005

....과 :

첫 방송 : _00004

두 번째 실행합니다.

아무도이 작업을 수행하는 데 도움이 될 수있는 몇 가지 팁을 갖고 있습니다. :).

는 당신의 도움을 주셔서 감사합니다.

답변

2

문자열 목록을 사용하여 접근법을 테스트 할 수 있습니다. 따라서 파일을 삭제할 위험이 없습니다. ;-)

files = ["Ite_1_0001.eps", "Ite_2_0001.eps", "Ite_3_0001.eps", "Ite_4_0001.eps",] 

for f in files: 
    # Get the value between underscores. This is the index. 
    index = int(f[4:f.index('_', 4)]) 
    new_name = '_%04d' % index 
    # Join the prefix, index and sufix file 
    print ''.join([f[:3], new_name, f[-4:]]) 

Ite_0001.eps

Ite_0002.eps

Ite_0003.eps

Ite_0004.eps

2

당신은 동적으로 난 당신이 입력에 기본 이름을 부여하는 경우 올바른 이름을 반환하는 함수를 작성 그래서

import os, re 
n = 1 
for i in os.listdir('.'): 
    os.rename(i, re.sub(r'\(\d{4}\)', '(Ite_) ({n})'.format(n=n), i)) 
    n += 1 
0

처럼 당신이 당신의 루프 내에서 대체하고있는 일을 변경할 수 있습니다.

def newname(old_name): 
    num = old_name[4] 
    return (old_name[0:3] + old_name[5:-1] + num) 
관련 문제