特定のファイル拡張子を持つファイルを新しいフォルダにコピーしたいのですが。 os.walk
の使い方はわかりますが、具体的にはどうすればよいですか? 1つのフォルダで特定のファイル拡張子を持つファイルを検索しています(このフォルダには2つのサブディレクトリがありますが、探しているファイルはこれらの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.copy()、shutil.copy2()、またはshutil.copyfile())を選択するには、shutilモジュールの ドキュメント をお読みください。
繰り返しを行わない場合は、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)
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_))