gpt4 book ai didi

python - 通过跳过 Python 中的某些目录递归复制文件?

转载 作者:太空宇宙 更新时间:2023-11-03 12:34:48 25 4
gpt4 key购买 nike

我想递归地将一个目录复制到另一个目录。我还想忽略一些文件(例如所有隐藏文件;所有以“.”开头的文件),然后在所有其他文件上运行一个函数(在复制它们之后)。这在 shell 中很简单,但我需要一个 Python 脚本。

我尝试使用 shutil.copytree,它具有忽略支持,但我不知道如何让它对每个复制的文件执行一个函数。我可能还需要在复制时检查一些其他条件,所以我不能在所有文件被复制后就运行该函数。我也尝试查看 os.walk,但我无法弄明白。

最佳答案

您可以使用 os.walk迭代每个文件,应用您的自定义过滤功能并仅复制您关心的文件。

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

Generate the file names in a directory tree by walking the tree either top-down or bottom-up. For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

您可以将所有复制的文件添加到列表中,并使用它来运行自定义脚本或在每次复制操作后运行脚本。

这应该让你开始:

import os

def filterls(src, filter_func):
for root, dirs, files in os.walk(src):
for f in files:
if filter_func(f):
path = os.path.join(root, f)
yield path[len(src)+1:]

它接受一个目录路径和一个接受单个参数的函数。如果函数对传递的文件名返回 False,则忽略该文件。

你可以像这样在 python 解释器中尝试它:

# Get a list of all visible files rooted in the 'path/to/the/dir' directory
print list(filterls('path/to/the/dir', lambda p: not p.startswith('.')))

关于python - 通过跳过 Python 中的某些目录递归复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com