如何获取不含PDF文件的文件夹路径?现有Python代码异常求助
如何找出所有不含PDF文件的文件夹?
我明白你遇到的问题了——你的代码逻辑刚好搞反了,还会重复添加文件夹,所以才返回了几乎所有路径。咱们一步步来解决这个问题:
先说说你原代码的问题
你的代码里,只要遍历到一个不是PDF的文件,就把当前文件夹路径加入列表。这意味着:
- 哪怕文件夹里有PDF,只要还有其他文件,它就会被多次添加到结果里
- 完全不符合“只找不含任何PDF的文件夹”的需求
正确的实现思路
我们需要对每个文件夹做的是:检查这个文件夹里有没有任何PDF文件,如果完全没有,才把它加入结果列表。
这里有两种简洁的实现方式:
方式一:用标志位逐文件检查(直观易懂)
import os path = 'T:/Projects/' paths_not_containing_pdfs = [] for root, dirs, files in os.walk(path): has_pdf = False # 遍历当前文件夹的所有文件 for name in files: # 找到一个PDF就标记并跳出循环,不用继续检查了 if name.lower().endswith('.pdf'): has_pdf = True break # 如果没有找到任何PDF,就把这个文件夹加入列表 if not has_pdf: paths_not_containing_pdfs.append(root) # 输出结果 for folder in paths_not_containing_pdfs: print(folder)
方式二:用any()函数简化代码(更Pythonic)
利用Python的内置函数any()可以一行搞定检查逻辑,代码更简洁:
import os path = 'T:/Projects/' # 列表推导式直接生成结果 paths_not_containing_pdfs = [ root for root, dirs, files in os.walk(path) if not any(f.lower().endswith('.pdf') for f in files) ] # 打印结果 for folder in paths_not_containing_pdfs: print(folder)
额外优化:匹配大小写不敏感的PDF后缀
我在代码里加了.lower(),这样不管是.pdf还是.PDF甚至.Pdf都能被匹配到,避免漏掉那些后缀大写的PDF文件。
内容的提问来源于stack exchange,提问作者CodingBiology
相关产品推荐
相关产品推荐

