Я хочу скопировать файлы с определенным расширением в новую папку. У меня есть идея, как использовать os.walk, но, в частности, как мне это использовать? Я ищу файлы с определенным расширением файла только в одной папке (в этой папке есть 2 подкаталога, но файлы, которые я ищу, никогда не будут найдены в этих 2 подкаталогах, поэтому мне не нужно искать в этих подкаталогах) . Заранее спасибо.






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)
Прочтите документация модуля shutil, чтобы выбрать функцию, которая соответствует вашим потребностям (shutil.copy (), shutil.copy2 () или shutil.copyfile ()).
Это будет проходить по дереву с подкаталогами. Вы можете выполнить проверку 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))
Если у вас нет рекурсии, вам не нужно walk ().
Ответ Федерико с помощью glob прекрасен, если у вас не будет никаких каталогов с именем 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)
basename = os.path.normcase(basename) до basename.endswith может быть полезен (в Windows).
Вот нерекурсивная версия с 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")
Скопируйте файлы с расширением extension из srcDir в dstDir ...
import os, shutil, sys
srcDir = sys.argv[1]
dstDir = sys.argv[2]
extension = sys.argv[3]
print "Source Dir: ", srcDir, "\n", "Destination Dir: ",dstDir, "\n", "Extension: ", extension
for root, dirs, files in os.walk(srcDir):
for file_ in files:
if file_.endswith(extension):
shutil.copy(os.path.join(root, file_), os.path.join(dstDir, file_))
использование
.lower()в системах, чувствительных к регистру, является ошибкой (преобладает MS Windows, но это не весь мир).os.path.normcase(file)предпочтительнее.