Цитирование Douglas Crockford 1:
Оператор
blockquote>&&
создает значение своего первого операнда, если первый операнд является ложным. В противном случае он выдает значение второго операнда.1 Дуглас Крокфорд: JavaScript: Хорошие детали - Страница 16
import glob, os, shutil
files = glob.iglob(os.path.join(source_dir, "*.ext"))
for file in files:
if os.path.isfile(file):
shutil.copy2(file, dest_dir)
Read документация из shutil модуля для выбора функции, которая соответствует потребностям (shutil.copy (), shutil.copy2 () или shutil.copyfile ()).
Вот нерекурсивная версия с os.walk
:
import fnmatch, os, shutil
def copyfiles(srcdir, dstdir, filepattern):
def failed(exc):
raise exc
for dirpath, dirs, files in os.walk(srcdir, topdown=True, onerror=failed):
for file in fnmatch.filter(files, filepattern):
shutil.copy2(os.path.join(dirpath, file), dstdir)
break # no recursion
Пример:
copyfiles(".", "test", "*.ext")
Если Вы не рекурсивно вызываете, Вы не должны идти ().
ответ Federico с шариком прекрасен, предполагая, что Вы не собираетесь иметь любые каталоги, названные вЂsomething.ext’. Иначе попробуйте:
import os, shutil
for basename in os.listdir(srcdir):
if basename.endswith('.ext'):
pathname = os.path.join(srcdir, basename)
if os.path.isfile(pathname):
shutil.copy2(pathname, dstdir)
Это обойдет дерево с подкаталогами. Можно сделать проверку os.path.isfile для создания этого немного более безопасным.
for root, dirs, files in os.walk(srcDir):
for file in files:
if file[-4:].lower() == '.jpg':
shutil.copy(os.path.join(root, file), os.path.join(dest, file))