2016-02-02 1 views
1

Я пытаюсь найти все мои файлы с externsion mp4 в папке (и вложенной папке) и скопировать их в другой каталог. Мне удалось найти все файлы с расширением mp4, однако мне не удалось сохранить каталог этих файлов. Мой код:Найти подкаталоги файлов с определенным externsion в python

import os 
from shutil import copyfile 

path = "videos/" 
for root, dirs, files in os.walk(path): 
    for name in files: 
     if name.endswith((".mp4", ".mp4")): 
      print(name) 
      # copyfile(src, dst) 

Я хочу найти путь к названию (соответствующий моим vids). Как я могу это сделать?

ответ

1

Использование os.path.join()

import os 
from shutil import copyfile 

path = "videos/" 
for root, dirs, files in os.walk(path): 
    for name in files: 
     if name.endswith((".mp4", ".mp4")): 
      print(os.path.join(root, name)) 
      # copyfile(src, dst) 

Хотя считается лучше использовать абсолютные пути, но вы можете использовать os.path.relpath, если вы хотите, относительный путь. Из os.path.relpath документации

os.path.relpath (путь [, начало])

Возвращения родственника путь_к_файла на путь либо из текущего каталога или от дополнительного каталога начала. Это вычисление пути: файловая система не имеет доступа для подтверждения существования или характера пути или начала.

Старт по умолчанию os.curdir.

Доступность: Windows, Unix.

Новое в версии 2.6.

1

Почему бы просто не использовать glob:

import glob, shutil 
for file in glob.iglob('/foo/*.mp4'): 
    shutil.copy2(file, '/bar/{0}'.format(file)) 
1

Из документации на os.walk:

dirpath является строка, путь к каталогу. dirnames - это список имен подкаталогов в dirpath (исключая «.» и «..»). filenames - список имен файлов без каталога в каталоге dirpath. Обратите внимание, что имена в списках не содержат компонентов пути. Чтобы получить полный путь (который начинается с вершины) к файлу или каталогу в dirpath, выполните os.path.join (dirpath, name).

Так что ваш код должен выглядеть следующим образом:

import os 
from shutil import copyfile 

path = "videos/" 
for root, dirs, files in os.walk(path): 
    for name in files: 
     if name.endswith((".mp4", ".mp4")): 
      print(name) 
      src = os.path.join(root, name) 
      copyfile(src, dst) 
Смежные вопросы