2016-07-30 6 views
0

아래 python 코드의 목적은 rootdir1 경로 내의 모든 폴더에 포함 된 모든 .jpg 파일을 찾고 모든 파일을 targetfolder로 이동하는 것입니다.파일 찾기 및 이동을위한 Python 스크립트

내가 코드 작업을 확인했을 때, 대상 폴더에 복사되지 않은 몇 개의 jpg를 발견했습니다. 코드에서 나는 무엇을 놓치고 있습니까?

import os 
import shutil 

RootDir1 = r'/Users/brianwuollet/Desktop/Takeout' 
TargetFolder = r'/Users/brianwuollet/Desktop/Photos' 
for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False): 
    for name in files: 
     if name.endswith('.jpg'): 
      print "Found" 
    SourceFolder = os.path.join(root,name) 
    shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder 

답변

1

당신은 들여 쓰기를 수정해야합니다 :

import os 
import shutil 

RootDir1 = r'/Users/brianwuollet/Desktop/Takeout' 
TargetFolder = r'/Users/brianwuollet/Desktop/Photos' 
for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False): 
    for name in files: 
     if name.endswith('.jpg'): 
      print "Found" 
      SourceFolder = os.path.join(root,name) #<--- Here Is The Change 
      shutil.copy2(SourceFolder, TargetFolder) #<--- Here Is The Change 

을 지금 당신이 그렇게 모든 파일이 코드의 들여 쓰기가 잘못

+1

당신이 마크 한 줄은 더 들여 쓰기해야한다고 생각합니다. 그렇지 않으면 .jpg로 끝나는 * 모든 * 파일을 복사하게됩니다. 물론 – jedwards

+1

@ jedwards입니다. 결정된. –

1

복사, 루프 외부에서 복사하고 있습니다. 라인 :

SourceFolder = os.path.join(root,name) 
shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder 

단지 하나의 파일에 결과 os.walk() 가로 지르는 각 디렉토리에 대해 한 번만 실행됩니다 각 디렉토리에서 복사. 코드를 다음으로 변경하십시오.

for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False): 
    for name in files: 
     if name.endswith('.jpg'): 
      print "Found" 
      SourceFolder = os.path.join(root,name) 
      shutil.copy2(SourceFolder, TargetFolder) #copies file to target folder 

이제 '.jpg'로 끝나는 각 파일이 복사됩니다.

동일한 기본 이름으로 파일을 덮어 쓸 수도 있습니다. 실제로 파일을 복사하는 대신 으로 이동하면 파일이 손실 될 수 있습니다. 같은 이름의 파일이 대상 디렉토리에 이미 있는지 여부를 확인한 다음 경고를 인쇄하거나 복사 할 때 파일의 이름을 바꿀 수 있습니다.