【发布时间】:2014-10-29 18:51:43
【问题描述】:
我到处寻找这个答案,但找不到。
我正在尝试编写一个脚本来搜索特定的子文件夹,然后检查它是否包含任何文件,如果是,则写出该文件夹的路径。我已经弄清楚了子文件夹搜索部分,但是检查文件让我很困惑。
我发现了多个关于如何检查文件夹是否为空的建议,并且我尝试修改脚本以检查文件夹是否为空,但我没有得到正确的结果。
这是最接近的脚本:
for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
print(dirpath)
这将列出所有空的子文件夹,但如果我尝试将其更改为:
if os.listdir(dirpath)!=[]:
print(dirpath)
它将列出所有内容——不仅仅是那些包含文件的子文件夹。
如果有人能指出我正确的方向,我将不胜感激。
这适用于 Python 3.4,如果这很重要的话。
感谢您能给我的任何帮助。
【问题讨论】:
-
“空”是指“不包含任何内容(
.和..除外)”,还是“除了子目录不包含任何内容”,还是“不包含任何内容”任何常规文件”,或“不包含任何非隐藏的常规文件”,或不同的东西? -
同时,你为什么使用
os.walk,然后在每个dirpath上也使用os.listdir?您已经拥有dirnames和files;为什么要调用一个函数来获取你已经拥有的相同信息? -
最后,你几乎不想检查
!= []或== []。只需使用空序列是错误的,而非空序列是真实的这一事实:if not os.listdir(dirpath):会做你想做的事。 -
空,我的意思是没有常规文件。我的问题是我无法按扩展名搜索,因为正在使用许多不同的文件类型(.txt、.csv、.xls 等),我不知道所有类型的文件都存储在这些子目录中,并且我不想错过任何常规文件。
-
我不确定您是否知道“常规文件”的含义。它与扩展无关;常规文件是不是目录、块设备、FIFO 等的文件。您可以通过
stat(或仅通过调用os.path.isfile)来判断。如果这确实是您想要的,仅使用walk中的files是不够的 - 排除目录,但不排除其他任何内容。
标签: python python-3.4