2013-05-25 3 views
0

디렉토리의 모든 파일의 이름을 변경하여 각 파일에 여러 변경 사항을 적용하여 파일 이름을 인터넷에 친숙하게 만듭니다. 몇 가지 대체물에 대해 올바르게 작동 한 다음 파일을 찾을 수 없다고 말합니다. 나는 비록 그것이 느려지면 time.sleep()으로 동작 할 것이지만 이것은 (느린 것 외에는) 효과가없는 것 같다. 어떤 경우에는 스크립트를 여러 번 실행하여 목표를 달성 할 수 있지만 경우에 따라 오류없이 완료되지만 변경 사항이 적용되지 않습니다. 모든 제안을 부탁드립니다.파이썬 이름 바꾸기 파일이 예상대로 작동하지 않습니다.

답변

3

filename.replace()은 새로운 문자열을 반환합니다. 어떤 식 으로든 파일 이름을 변경하지는 않습니다. 따라서 파일 이름을 변경 한 후에 파일 이름이 오래되어 다음에 파일을 찾지 못하면 오류가 발생합니다. 이 같은

시도 뭔가 :

import os, glob, time 

def new_filename(filename): 
    return filename.replace(' ', '_').lower().encode('utf8').replace(' (', '-') \ 
        .replace(')', '').replace(',', '').replace('_-_', '-') 

path = os.getcwd() 
dirlist = glob.glob('*.pdf') 
for filename in dirlist: 
    os.rename(os.path.join(path, filename), os.path.join(path, new_filename(filename))) 
+0

감사합니다! 이것은 효과가 있었다. – John

+1

이 글은 다음과 같이 작성된 것 같습니다 : http://pastebin.com/gwtxUmh4 – jamylak

0
usage = ''' 

$python slug_dir.py DIR 

''' 

from os import rename, walk 
from os.path import join, isdir, splitext 
from slugify import slugify 


def rename_files(dir_path): 
    for path, subdirs, files in walk(dir_path): 
     for fname in files: 
      filename, extension = splitext(fname) 
      s = slugify(filename) 
      newname = s+extension 
      try: 
       oldpath = join(path, fname) 
       newpath = join(path, newname) 
       print rename(oldpath, newpath) 
       print 'Rename: ', oldpath, '->', newpath 
      except Exception as e: 
       print 'Error triying rename: ', fname, '->', newname 
       raise e 

def main(): 

    dirname = sys.argv[1] 
    if not isdir(dirname): 
     print usage 
     sys.exit(1) 

    rename_files(dirname) 


if __name__ == '__main__': 
    main() 
관련 문제