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

StackOverflow https://stackoverflow.com/questions/296173

  •  08-07-2019
  •  | 
  •  

Вопрос

Я хотел бы скопировать файлы с определенным расширением в новую папку.У меня есть идея, как использовать 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_))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top