Python рекурсивный поиск файлов и перемещение в один каталог назначения - PullRequest
3 голосов
/ 15 сентября 2011

Сценарий должен рекурсивно пройти через каталог rootpath и найти все файлы с расширением * .mp4.Распечатать список файлов со структурой каталогов.Затем переместите файлы в каталог destDir.Проблема, с которой я сталкиваюсь, заключается в попытке переместить файлы в новый каталог.Только файлы в каталоге rootPath будут перемещены в новое место назначения.Файлы в подкаталогах rootPath вызывают ошибки:

/Volumes/VoigtKampff/Temp/TEST/level01_test.mp4
/Volumes/VoigtKampff/Temp/TEST/Destination/2levelstest02.mp4
 Traceback (most recent call last):
  File "/Volumes/HomeFolders/idmo04/Desktop/ScriptsLibrary/Python/recursive_find.py",     line 14, in <module>
    shutil.move(root+filename, destDir+'/'+filename)
     File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 281, in move
copy2(src, real_dst)
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 110, in copy2
    copyfile(src, dst)
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/shutil.py", line 65, in copyfile
    with open(src, 'rb') as fsrc:
  IOError: [Errno 2] No such file or directory:       '/Volumes/VoigtKampff/Temp/TEST/Destination2levelstest02.mp4'    
############## вот скрипт
import fnmatch
import os
import shutil

rootPath = '/Volumes/VoigtKampff/Temp/TEST/'
destDir = '/Volumes/VoigtKampff/Temp/TEST2/'


matches = []
for root, dirnames, filenames in os.walk(rootPath):
  for filename in fnmatch.filter(filenames, '*.mp4'):
      matches.append(os.path.join(root, filename))
      print(os.path.join(root, filename))
      shutil.move(root+filename, destDir+'/'+filename)

Ответы [ 2 ]

7 голосов
/ 15 сентября 2011

Поздравляем! Вы уже нашли os.path.join(). Вы даже используете его, по вашему print звонку. Так что вам нужно использовать его только с move():

shutil.move(os.path.join(root, filename), os.path.join(destDir, filename))

(Но будьте осторожны, чтобы ничего не перезаписать в destDir.)

1 голос
/ 15 сентября 2011

Изменить root + filename в последней строке на os.path.join(root, filename) (как видно двумя строками ранее)?

...