2015-05-01 2 views
0

У меня есть несколько файлов разного типа в разных папках и подпапках. Они огромны. Я ищу, чтобы извлечь все файлы из всех мест и скопировать в один каталог.Извлечение нескольких файлов из нескольких папок

Я написал сценарий Python следующим образом, [только для файла .doc], но занимает слишком много времени.

import os 
from fnmatch import fnmatch 
def listallfiles1(n): 
    root = 'C:\Cand_Res' 
    pattern = "*.doc" 
    for path, subdirs, files in os.walk(root): 
     for name in files: 
      if fnmatch(name, pattern): 
       print os.path.join(path, name) 

Если вы можете предложить какое-нибудь интеллектуальное решение, используя любую функцию Windows или любую команду MS-DOS и т. Д. Или скрипт Python.

+1

Если это работает, разместите его на codereview –

+0

Первое, что нужно сделать, когда что-то «занимает много времени» - это запустить профилировщик, чтобы определить узкое место. Python имеет [стандартный модуль cProfile для этого] (https://docs.python.org/2/library/profile.html). См. Http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script для некоторых простых примеров использования и альтернатив. –

+0

Это вряд ли поможет вам сейчас, если вы не хотите попробовать альфа-версию, но [os.walk в 3.5] (https://docs.python.org/3.5/library/os.html#os.walk) является значительно быстрее в Windows. – eryksun

ответ

0

Помогает ли эта команда?

dir *.doc /b /s 

Это должны быть перечислены все файлы с расширением .doc в текущем каталоге и всех его подкаталогах. /b делает вывод отображения только каталогами и файлами, а /s определяет поиск подкаталогов.

+0

Спасибо, но теперь, если мне нужно переместить их в папку назначения? Извините за то, что опять беспокою вас. –

+0

Спасибо, но я хотел перейти от MS-DOS, команды move/MOVE/REN не помогли. –

+0

Это еще один вопрос :) ... но посмотрите на '' shutil.move() '] (https://docs.python.org/2/library/shutil.html#shutil.move) или [' os. переименование() '] (http://docs.python.org/library/os.html#os.rename). Вы можете запустить команду dos с помощью 'subprocess.check_output()', собрать вывод и затем перенести файлы в Python. Для чистого решения DOS см. Этот ответ: http://stackoverflow.com/a/246576/21945 и используйте 'move' или' ren' вместо 'copy'. – mhawke