gpt4 book ai didi

python - 如何使用临时文件系统在 python 中模拟 os.walk?

转载 作者:IT老高 更新时间:2023-10-28 20:26:42 25 4
gpt4 key购买 nike

我正在尝试测试一些使用 os.walk 的代码。我想创建一个临时的内存文件系统,我可以用 os.walk 将返回的示例(空)文件和目录填充它。这应该为我节省了模拟 os.walk 调用以模拟递归的复杂性。

具体来说,我要测试的代码是:

if recursive:
log.debug("Recursively searching for files under %s" % path)

for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
else:
log.debug("Non-recursively searching for files under %s" % path)

for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f

这在 python 中可能吗?

最佳答案

没有。 os.walk() 完全围绕os.listdir() 构建。 ,在 os.path.islink()os.path.isdir() 的帮助下。这些本质上是系统调用,因此您必须在系统级别模拟您的文件系统。除非你想写一个 FUSE plugin这不容易模拟。

所有 os.walk() 需要返回的是一个元组列表,真的。除非您正在测试操作 dirs 组件,否则它再简单不过了:

with mock.patch('os.walk') as mockwalk:
mockwalk.return_value = [
('/foo', ('bar',), ('baz',)),
('/foo/bar', (), ('spam', 'eggs')),
]

这将模拟以下目录结构:

/foo
├── baz
└── bar
├── spam
└── eggs

关于python - 如何使用临时文件系统在 python 中模拟 os.walk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533243/

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