I'd like to copy the files that have a specific file extension to a new folder. I have an idea how to use os.walk
but specifically how would I go about using that? I'm searching for the files with a specific file extension in only one folder (this folder has 2 subdirectories but the files I'm looking for will never be found in these 2 subdirectories so I don't need to search in these subdirectories). Thanks in advance.
我想将具有特定文件扩展名的文件复制到新文件夹。我知道如何使用os.walk但具体如何使用它?我只在一个文件夹中搜索具有特定文件扩展名的文件(此文件夹有2个子目录,但我在寻找的文件永远不会在这两个子目录中找到,所以我不需要在这些子目录中搜索) 。提前致谢。
5 个解决方案
#1
30
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)
Read the documentation of the shutil module to choose the function that fits your needs (shutil.copy(), shutil.copy2() or shutil.copyfile()).
阅读shutil模块的文档,选择适合您需求的函数(shutil.copy(),shutil.copy2()或shutil.copyfile())。
#2
6
If you're not recursing, you don't need walk().
如果您没有递归,则不需要walk()。
Federico's answer with glob is fine, assuming you aren't going to have any directories called ‘something.ext’. Otherwise try:
假设你没有任何名为'something.ext'的目录,Federico对glob的回答很好。否则尝试:
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)
#3
3
Here is a non-recursive version with os.walk
:
这是一个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
Example:
例:
copyfiles(".", "test", "*.ext")
#4
1
This will walk a tree with sub-directories. You can do an os.path.isfile check to make it a little safer.
这将使用子目录遍历树。您可以执行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))
#5
1
Copy files with extension "extension" from srcDir to dstDir...
将扩展名为“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_))
#1
30
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)
Read the documentation of the shutil module to choose the function that fits your needs (shutil.copy(), shutil.copy2() or shutil.copyfile()).
阅读shutil模块的文档,选择适合您需求的函数(shutil.copy(),shutil.copy2()或shutil.copyfile())。
#2
6
If you're not recursing, you don't need walk().
如果您没有递归,则不需要walk()。
Federico's answer with glob is fine, assuming you aren't going to have any directories called ‘something.ext’. Otherwise try:
假设你没有任何名为'something.ext'的目录,Federico对glob的回答很好。否则尝试:
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)
#3
3
Here is a non-recursive version with os.walk
:
这是一个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
Example:
例:
copyfiles(".", "test", "*.ext")
#4
1
This will walk a tree with sub-directories. You can do an os.path.isfile check to make it a little safer.
这将使用子目录遍历树。您可以执行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))
#5
1
Copy files with extension "extension" from srcDir to dstDir...
将扩展名为“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_))