2012-07-19 2 views
0

도와주세요! 필자는 특정 확장명으로 파일을 이동하여 데스크톱을 구성하는 스크립트를 작성했습니다. 그것은 잘 작동하는 것 같았지만, 내 바탕 화면에서 느슨하게 할 때 이상한 일이 일어났습니다.파이썬으로 파일 이동 오류

그래서 모든 파일을 'PDF'및 'IMAGES'와 같이 즉시 작성된 폴더에 복사하지만 스크립트를 실행할 때 어떤 이유로 폴더가 아니라 파일을 만들고 다른 파일에 파일을 저장하는 이유가 있습니다.

나는이 녀석을 되 찾을 필요가있다. 그러나 나는 무엇을해야하는지 전혀 모른다. Windows 7을 사용하고 있습니다. 아래는 제 코드입니다. 어떤 도움을 주시면 감사하겠습니다.

import shutil 
import os 

pwd = os.getcwd() 
working_path = 'C:\\Users\\grayson\\Desktop' 
wp = working_path 
folders = {'pdf':'PDFS','img':'IMAGES'} 

def main(): 
    create_folders(); 

    for d in os.walk(wp): 
     files = d[2] 
     break 
    print files 

    for filename in files: 
     order_file(filename) 


def create_folders(): 
    for fol in folders.keys(): 
     fol_name = folders[fol] 
     if not os.path.isdir(fol_name): 
      os.mkdir(fol_name) 

def order_file(fname): 
    split_name = fname.split('.') 
    exten = split_name[len(split_name)-1] 

    if exten == 'pdf': 
     shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf']) 
    elif exten == 'jpg' or exten == 'png' or exten == 'gif': 
     shutil.move(wp + '\\' + fname, wp + '\\' + folders['img']) 
    else: 
     print 'Sumin else' 

main() 
+1

데스크톱 디렉토리에서 실행하지 않았습니까? 이 스크립트로 수행 한 피해는 불행하게도 되돌릴 수 없습니다. 스크립트가 잘못했는지 설명하는 답변을 원하십니까? – jdi

+0

'shutil.move (wp + '\\'+ fname, wp + '\\'+ folders [ 'pdf'])'이 스크립트는 스크립트를 실행하지 않은 경우 파일의 이름을 filename에서 PDFS로 바꿉니다 바탕 화면 및 다른 이동 진술에 대한 동일 – avasal

답변

2

기본적으로 파일을 정렬 된 디렉토리로 옮기는 것은 매우 어색한 스크립트입니다. 그러나 무엇이 잘못되었는지에 대한 나의 추측이 있습니다. Desktop을 현재 작업 디렉토리로 실행하지 않은 경우 (스크립트를 실행할 때이 디렉토리에 없었 음을 의미 함) 폴더가 다른 위치에 만들어졌습니다. 그런 다음 파일이 이동하기 시작하면 디렉토리가 존재하지 않으므로 서로 파일을 새 파일로 이동했습니다.

불행히도이 피해를 되돌릴 수 없습니다. 당신의 유일한 희망은 당신이 백업을 가지고 있다는 것입니다.

좀 더 구체적으로 스크립트의 일부를 설명하게

...

pwd = os.getcwd() 
working_path = 'C:\\Users\\grayson\\Desktop' 

pwdworking_path과 동일하지 않은 경우, 모든 스크립트에서 잘못 될 것입니다. 또한 창에는 항상 슬래시를 사용해야합니다. 경로 건물에 대한 유효하고 쉽게 : working_path = 'C:/Users/grayson/Desktop'

폴더 생성 섹션 :

# BEFORE 
def create_folders(): 
    for fol in folders.keys(): 
     fol_name = folders[fol] 
     if not os.path.isdir(fol_name): 
      os.mkdir(fol_name) 

당신은 디렉토리가 실제로 working_path 변수에 따라 생성되는 것을 보장하지 않습니다. 당신은 이것을 다음과 같이 쓸 수있었습니다 :

# AFTER 
def create_folders(): 
    for fol_name in folders.itervalues(): 
     fol_path = os.path.join(working_path, fol_name) 
     if not os.path.isdir(fol_path): 
      os.mkdir(fol_path) 

저것은 아마도 당신을 구했을 것입니다. 스크립트를 실행 한 곳이 아닌 Desktop 아래에 특별히 디렉토리를 만들었을 것입니다.

# BEFORE 
split_name = fname.split('.') 
exten = split_name[len(split_name)-1] 

확장 기능을 사용하려면 많은 입력이 필요합니다. 슬래시를 추가하여

# BEFORE 
if exten == 'pdf': 
    shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf']) 
elif exten == 'jpg' or exten == 'png' or exten == 'gif': 
    shutil.move(wp + '\\' + fname, wp + '\\' + folders['img']) 
else: 
    print 'Sumin else' 

당신은 경로를 구축하고 단지 디렉토리 이름으로 대상을 제작할 수 있습니다 파일을 이동 위치를 마지막으로

# AFTER 
exten = fname.split('.')[-1] 

그리고, 부분 : 당신은에 의해이 쉽게 만들었을 수도. 해당 디렉토리가 존재하지 않으면 파일을 가정합니다.특정 파일 이름으로 빌드해야합니다 :

# AFTER 
src = os.path.join(wp, fname) 
key = None 

if exten == 'pdf': 
    key = 'pdf' 
elif exten in ('jpg', 'png', 'gif'): 
    key = 'img' 

if key: 
    shutil.move(src, os.path.join(wp, folders['img'], fname)) 
else: 
    print 'Sumin else' 

이 방법은 디렉토리가 존재하지 않을 경우 실패하게됩니다.

+0

아. 네가 옳아. 나는이 스크립트가 좋지 않다는 것을 안다 (약 5 분 만에 그것을 썼다). 덜 어색한 구조적인 권장 사항이 있습니까? 나는 파이썬에 대해 많이 모른다. – ballaw

1

안전한 방법으로 디렉토리를 만들지 않았습니다.

하나는 추측 할 수 있지만 이전 시도에서 PDFS 등의 파일이 있었고 디렉토리가 만들어지지 않았을 수 있습니다. 그래서 당신은 '당신의 모든 이미지를 다른 이미지로 차례 차례 이름을 바꾸 었습니다 ... 돌아갈 방법이 없습니다.

미리 백업 해 두었 으면합니다.