gpt4 book ai didi

python - 使用列表理解和两段不同的代码写入文件

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

我有两段代码,我认为它们是等价的;谁能解释我在列表理解方面缺少的理由?

以下代码在写入文件时仅生成最后一个子文件夹的内容:

for root, directories, files in os.walk(directory):
filenames = [os.path.join(root, filename) for filename in files]

然而,接下来的代码完全符合我的要求(写入根目录及其子目录的所有内容):

allfiles = [os.path.join(root,f) for root,dirs,files in os.walk(directory) for f in files]

因此,它们对我来说似乎相同,但显然不是。有人可以指出我正确的方向吗?

最佳答案

首先,您不是使用列表理解写入文件。您正在使用列表理解来构建完整文件路径的列表。

每个目录 应用第一个列表理解,该目录由 os.walk() 方法找到。根据主 directory 路径下有多少个目录,它会被调用多次。

第二个列表理解适用于所有 目录和文件。它只会被调用一次,并构建整个 directory 文件系统结构中所有文件的列表。

如果您希望第一个给出相同的结果,您需要扩展一个列表对象:

all_files = [] 
for root, directories, files in os.walk(directory):
filenames = [os.path.join(root, filename) for filename in files]
all_files.extend(filenames)

现在除了该列表理解的最后一个结果外,您不会丢弃所有结果。

关于python - 使用列表理解和两段不同的代码写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773180/

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