支持通配符的Python Windows文件复制

Wan*_*wei 9 python file pywin32 wildcard

我一直这样做:

result = subprocess.call(['copy', '123*.xml', 'out_folder\\.', '/y'])
if result == 0: 
    do_something()
else:
    do_something_else()
Run Code Online (Sandbox Code Playgroud)

直到今天我开始研究pywin32模块,然后我看到了像win32file.CopyFiles()这样的函数,但后来我发现它可能不支持将文件复制到目录.也许这个功能隐藏在某处,但我还没有找到它.

我也试过"glob"和"shutil"组合,但如果有很多文件,"glob"会非常慢.

那么,你如何用Python模拟这个Windows命令?

copy 123*.xml out_folder\. /y
Run Code Online (Sandbox Code Playgroud)

Fre*_*rik 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")
Run Code Online (Sandbox Code Playgroud)

附加文件:

  • 请注意,如果输入文件包含路径,则必须使用 - join(dst_folder,os.path.basename(fname))创建目标文件名 (2认同)

cry*_*ryo 7

以下示例相当天真 - 如果出现问题则不进行任何检查,并且不会创建任何目录,但可能会执行您想要的操作:

import glob
import shutil

for path in glob.iglob('123*.xml'):
    shutil.copy(path, 'out_folder/%s' % path)
Run Code Online (Sandbox Code Playgroud)

另见:http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html

使用win32file/SHFileOperation复制似乎更具功能性,但不是那么便携,而且使用起来更复杂.