2016-12-09 4 views
0

하위 이름에있는 마지막 네 개의 문자를 제거하여 하위 디렉토리에 저장된 파일의 이름을 바꾸려고합니다. 나는 일반적으로 찾아서 사용 하나의 디렉토리에있는 파일의 이름을 변경 glob.glob()를 사용os.walk()을 사용하여 파일의 이름을 바꾸는 방법은 무엇입니까?

import glob, os 

for file in glob.glob("C:/Users/username/Desktop/Original data/" + "*.*"): 
    pieces = list(os.path.splitext(file)) 
    pieces[0] = pieces[0][:-4] 
    newFile = "".join(pieces)  
    os.rename(file,newFile) 

을하지만 지금은 모든 하위 디렉토리에 위를 반복합니다. 나는 os.walk()를 사용하여 시도 :

import os 

for subdir, dirs, files in os.walk("C:/Users/username/Desktop/Original data/"): 
    for file in files: 
     pieces = list(os.path.splitext(file)) 
     pieces[0] = pieces[0][:-4] 
     newFile = "".join(pieces)  
     # print "Original filename: " + file, " || New filename: " + newFile 
     os.rename(file,newFile) 

print 문이 제대로 원래 내가 찾고 있어요 새로운 파일 이름을 인쇄하지만, 다음과 같은 오류 os.rename(file,newFile) 반환

Traceback (most recent call last): 
    File "<input>", line 7, in <module> 
WindowsError: [Error 2] The system cannot find the file specified 

을 나는이 문제를 해결 수있는 방법 ?

+1

: os.walk에 의해 반환 된 tuple의 첫 번째 항목은 현재 경로가 그래서 그냥 파일 이름으로 결합 os.path.join를 사용하다 도보로 같은 디렉토리에 ... –

+0

@RafaelRodrigoDeSouza - 고마워, 당신은 niemmi의 대답 =에 의해 설명 된대로 맞습니다 – Joseph

답변

2

파일의 전체 경로를 os.rename으로 전달해야합니다. 난 당신이하지 않기 때문에 당신은 또한 os.raname에 파일의 전체 경로를 통과한다고 생각

import os 

for path, dirs, files in os.walk("./data"): 
    for file in files: 
     pieces = list(os.path.splitext(file)) 
     pieces[0] = pieces[0][:-4] 
     newFile = "".join(pieces) 
     os.rename(os.path.join(path, file), os.path.join(path, newFile)) 
+0

완벽! 답변 주셔서 감사합니다 :) – Joseph