Как скопировать файлы с определенным расширением в папку в моем скрипте Python (версия 2.5)?
Вопрос
Я хотел бы скопировать файлы с определенным расширением в новую папку.У меня есть идея, как использовать os.walk
но конкретно, как мне это использовать?Я ищу файлы с определенным расширением только в одной папке (в этой папке есть 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 ()).
Другие советы
Если вы не используете рекурсивную программу, вам не нужно идти ().
Ответ Федерико с glob хороший, если у вас не будет никаких каталогов с именем & # 8216 ;thing.ext & # 8217 ;. В противном случае попробуйте:
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.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")
Это будет обходить дерево с подкаталогами. Вы можете выполнить проверку 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))
Копировать файлы с расширением " расширением " из 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_))