Python 在Windows上使用通配符复制文件
我一直在这样做:
result = subprocess.call(['copy', '123*.xml', 'out_folder\\.', '/y'])
if result == 0:
do_something()
else:
do_something_else()
直到今天,我开始研究pywin32模块,然后我看到像win32file.CopyFiles()这样的函数,但我发现它可能不支持将文件复制到一个目录里。也许这个功能隐藏在某个地方,但我还没找到。
我还尝试过“glob”和“shutil”的组合,但如果文件很多的话,“glob”会非常慢。
那么,怎么用Python来模拟这个Windows命令呢?
copy 123*.xml out_folder\. /y
5 个回答
7
下面这个例子比较简单,没考虑到出错的情况,也没有创建任何文件夹,但可能能满足你的需求:
import glob
import shutil
for path in glob.iglob('123*.xml'):
shutil.copy(path, 'out_folder/%s' % path)
另外,你可以参考这个链接:http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html
使用win32file/SHFileOperation来复制文件似乎功能更强大,但不太容易移植,而且使用起来也更复杂。
10
下面的代码提供了一种可移植的实现方式。
需要注意的是,我使用了 iglob(从 Python 2.5 开始加入的功能),它会创建一个生成器,这样就不会一次性把所有文件的列表都加载到内存中(而 glob 是这样做的)。
from glob import iglob
from shutil import copy
from os.path import join
def copy_files(src_glob, dst_folder):
for fname in iglob(src_glob):
copy(fname, join(dst_folder, fname))
if __name__=='__main__':
copy_files("123*.xml", "out_folder")
更多文档资料: