21

特定のファイル拡張子を持つファイルを新しいフォルダーにコピーしたいと考えています。os.walk使い方はわかったのですが、具体的にはどのように使うのでしょうか?1 つのフォルダーのみで特定のファイル拡張子を持つファイルを検索しています (このフォルダーには 2 つのサブディレクトリがありますが、探しているファイルはこれら 2 つのサブディレクトリには決して見つからないため、これらのサブディレクトリを検索する必要はありません)。 . 前もって感謝します。

4

5 に答える 5

38
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())。

于 2008-11-17T17:06:37.283 に答える
8

再帰しない場合は、walk() は必要ありません。

「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)
于 2008-11-17T19:39:49.020 に答える
3

これは非再帰的なバージョン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")
于 2008-11-18T18:32:59.077 に答える
3

これは、サブディレクトリを持つツリーをたどります。少し安全にするために 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))
于 2008-11-17T19:39:10.817 に答える
1

拡張子が「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_))
于 2013-02-12T13:41:45.630 に答える