我想将具有特定文件扩展名的文件复制到新文件夹中。我知道如何使用os.walk
,但具体来说我将如何使用它?我只在一个文件夹中搜索具有特定文件扩展名的文件(此文件夹有 2 个子目录,但我要查找的文件永远不会在这 2 个子目录中找到,因此我不需要在这些子目录中搜索) . 提前致谢。
Amara
问问题
45330 次
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()。
Federico 对 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)
于 2008-11-17T19:39:49.020 回答
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 回答
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 回答
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 回答