如何在shutil.copytree中编写忽略的回调函数
我对 python 比较陌生。我正在尝试将一个目录复制到另一个维护结构的目录。
我正在使用
shutil.copytree(src, dst, symlinks=False, ignore=None,
copy_function=copy2, ignore_dangling_symlinks=False)
我正在尝试编写一个回调函数来忽略。
我的目标是获取列表中的文件列表,并仅复制这些文件,忽略其余文件。我们如何将列表传递到回调函数中?
我编写了一个简单的回调函数,但是当我尝试运行 copyTree 函数时出现一些错误
def abc(src,names):
print(src)
print(names)
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
shutil.copytree('D:\Mytest','D:\PythonTestDest3',symlinks=False,ignore=abc)
File "C:\Python32\lib\shutil.py", line 204, in copytree
if name in ignored_names:
TypeError: argument of type 'NoneType' is not iterable
I am relatively new to python. I am trying to copy a directory to another directory maintaining the structure.
I am using
shutil.copytree(src, dst, symlinks=False, ignore=None,
copy_function=copy2, ignore_dangling_symlinks=False)
I am trying to write a call back function for ignore.
My aim is to take a list of files in a list , and copy only those files,ignoring the rest. How do we pass a list into the call back function?
I wrote a simple call back function , but I get some error when I try to run the copyTree function
def abc(src,names):
print(src)
print(names)
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
shutil.copytree('D:\Mytest','D:\PythonTestDest3',symlinks=False,ignore=abc)
File "C:\Python32\lib\shutil.py", line 204, in copytree
if name in ignored_names:
TypeError: argument of type 'NoneType' is not iterable
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
(文档)
尝试使用匿名函数 (
lambda
) 和列表理解:请注意,
lambda
函数获取文件的基本名称并目录,而不是它们的完整路径;感谢@jwhitlock 的目录处理。(docs)
Try an anonymous function (
lambda
) and a list comprehension:Note that the
lambda
function gets the basenames of the files and directories, not their full paths; kudos @jwhitlock's for the directory handling.忽略函数的返回需要是要忽略的目录和文件的列表。您没有返回任何内容,而是返回
None
,因此您收到错误TypeError: argument of type 'NoneType' is not iterable
。下面是一个示例,它将复制文件夹结构和“copy_these”中列出的文件:
The return of the ignore function needs to be a list of directories and files to ignore. You aren't returning anything, which returns
None
, so you are getting the errorTypeError: argument of type 'NoneType' is not iterable
.Here's an example that will copy the folder structure and the files listed in 'copy_these':
shutil 模块提供了
ignore_patterns
函数。模块页面还显示了一些示例。
The shutil module provides a
ignore_patterns
function.The module page shows a couple of examples as well.
忽略回调函数应返回与不应复制的“src”目录相关的名称列表。
您的示例回调不返回任何内容(即无)。然后 copytree 需要一个列表,尝试迭代它。因为它不能,所以你会得到这个例外。
The ignore callback function should return a list of names relative to the 'src' directory that should not be copied.
Your example callback returns nothing (ie. None). Then copytree, expecting a list, tries to iterate over it. Since it can't, you get that exception.