如何使用python执行非递归复制

我需要复制具有某些模式的文件。我需要使用shutil在给定目录上执行非递归复制。我尝试了下面给出的执行递归复制的代码。是否有任何选项可以在其中指定进行非递归复制。


    from fnmatch import fnmatch, filter

    from os.path import isdir, join

    from shutil import copytree, ignore_patterns


    src_directory = r'PATH'

    dst_directory = r'PATH'

    copytree(src_directory, ignored_directory,ignore=ignore_patterns('*.txt'))


牧羊人nacy
浏览 163回答 3
3回答

一只名叫tom的猫

首先确保目标目录存在。然后创建要忽略的所有文件的列表glob.glob。然后遍历目录中的所有文件和目录,如果它是一个文件并且不在列表中,则将src每个文件复制到dst目录ignore中:import os, shutil, globsrc = 'my_dir'dst = 'my_dir_cp'try:    os.mkdir(dst)except FileExistsError:    passignore = glob.glob(os.path.join(src, '*.txt'))for file in os.listdir(src):    file = os.path.join(src, file)    if file not in ignore and os.path.isfile(file):        shutil.copy(file, dst)一个完整的例子:$ ls my_dirbob  cat.txt  fish  jim$ python -q>>> import os, shutil, glob>>> src = 'my_dir'>>> dst = 'my_dir_cp'>>> >>> try:...     os.mkdir(dst)... except FileExistsError:...     pass... >>> ignore = glob.glob(os.path.join(src, '*.txt'))>>> for file in os.listdir(src):...     file = os.path.join(src, file)...     if file not in ignore and os.path.isfile(file):...         shutil.copy(file, dst)... 'my_dir_cp/jim''my_dir_cp/bob'>>> $ ls my_dir_cpbob  jim如果您希望能够忽略多个glob模式,那么您可以glob.glob将它们中的每一个并将结果连接在一起(在列表理解中):import os, shutil, globsrc = 'my_dir'dst = 'my_dir_cp'try:    os.mkdir(dst)except FileExistsError:    passpatterns_to_ignore = ['*.txt', '*.bat']ignore = [e for p in patterns_to_ignore for e in glob.glob(os.path.join(src, p))]for file in os.listdir(src):    file = os.path.join(src, file)    if file not in ignore and os.path.isfile(file):        shutil.copy(file, dst)

慕后森

这更像是一种黑客攻击,但会将目录中的所有文件以非递归方式复制到目标目录。您可以使用 glob 或 regex 来忽略文件 -import redef copytree(src, dst):     for item in [f for f in os.listdir(src) if os.path.isfile(os.path.join(src, f)) if not re.match(f, '[.]txt$')]:         s = os.path.join(src, item)         d = os.path.join(dst, item)         shutil.copy2(s, d)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python