2016-07-30 6 views
0

Целью приведенного ниже кода python является поиск всех файлов .jpg, включенных в любую папку в пути rootdir1, и переместить все файлы в целевую папку.Python Script для поиска и перемещения файлов

Когда я заметил проверку работы кода, я обнаружил несколько 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», будет скопирован.

Возможно также, что вы можете перезаписать файлы с тем же базовым именем, и это может привести к потерянным файлам, если вы на самом деле были , перемещая файл вместо того, чтобы просто копировать его. Вы можете проверить, существует ли файл с таким же именем в целевом каталоге, а затем распечатать предупреждение или каким-то образом переименовать файл при его копировании.

 Смежные вопросы

  • Нет связанных вопросов^_^