web-dev-qa-db-ja.com

特定のファイル拡張子を持つファイルをpython(バージョン2.5)スクリプトのフォルダーにコピーするにはどうすればよいですか?

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

19
Amara
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.copy()、shutil.copy2()、またはshutil.copyfile())を選択するには、shutilモジュールの ドキュメント をお読みください。

32

繰り返しを行わない場合は、walk()は必要ありません。

「something.ext」というディレクトリがないことを前提とすると、globを使用したFedericoの回答は問題ありません。それ以外の場合は試してください:

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)
7
bobince

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")
3
jfs

これにより、サブディレクトリのあるツリーがウォークされます。 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))
2
Deon

拡張子が「拡張子」のファイルを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_))
1
Mihai