Как скопировать файлы с определенным расширением в папку в моем скрипте python (версия 2.5)?

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
21
0
40 876
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий
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))

использование .lower() в системах, чувствительных к регистру, является ошибкой (преобладает MS Windows, но это не весь мир). os.path.normcase(file) предпочтительнее.

jfs 19.11.2008 01:47

Если у вас нет рекурсии, вам не нужно 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).
jfs 19.11.2008 01:53

Вот нерекурсивная версия с 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_))

Другие вопросы по теме