[英]Different results for list comprehension of files in directory compared to traditional loop
我需要获取的所有文件是一个目录及其子目录。 我很好奇为什么我得到的结果与我认为应该是两个等效的python表达式不同的结果。 如果有人可以解释差异,那将是有帮助的。 并不是说我偏爱任何特定的方法,但我至少想知道如何为此编写一个列表理解。
这是给我所需结果的循环表达式:
result = []
for dirpath,subdir,files in os.walk(directory):
for filename in files:
if '.nc' in filename:
result.append(filename)
因此,在我的情况下,结果列表的长度为1533,这是正确的数字。 现在使用我认为等效的列表理解将是:
result = [filename for filename in files if '.nc' in filename for dirpath,subdir,files in os.walk(directory)]
该结果列表的长度为2480,其原因是其中包含重复的文件。 为什么这个表达不等于上面的表达? 我知道这个示例不太具体,因为它取决于所使用的directory
,但是您可以尝试使用给定文件夹的文件路径以及'.nc'
到'.txt'
或目录中存在的某些字符串替换directory
。文件夹中的一堆文件。
我想你想要这个:
import os.path
result = [
os.path.join(dirpath, filename)
for dirpath, _, files in os.walk(directory)
for filename in files if '.nc' in filename
]
您在列表理解中的循环顺序错误。 看看这个问题以供参考。 我的快速经验法则是,如果不是列表理解,则按顺序编写循环,然后将输出表达式放在开始位置。
我添加了os.path.join
因为您似乎想要完整的路径。
如果仅需要此类匹配文件的总数,则可以执行以下操作:
result = sum(1
for dirpath, _, files in os.walk(directory)
for filename in files if '.nc' in filename
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.