如何使用Python检查文件夹是否为空?

spr*_*ssd 10 python python-2.7

我正在尝试检查文件夹是否为空,并执行以下操作:

import os
downloadsFolder = '../../Downloads/'
if not os.listdir(downloadsFolder):
    print "empty"
else:
    print "not empty"
Run Code Online (Sandbox Code Playgroud)

不幸的是,无论该文件夹中是否有文件,我总是会得到“不为空”的信息。是否因为可能存在一些隐藏的系统文件?有没有一种方法可以修改上面的代码以仅检查非隐藏文件?

小智 39

您可以使用os 模块中的这两种方法。

第一个选项:

import os
if len(os.listdir('/your/path')) == 0:
    print("Directory is empty")
else:    
    print("Directory is not empty")
Run Code Online (Sandbox Code Playgroud)

第二个选项(作为空列表False在 Python 中的计算结果):

import os
if not os.listdir('/your/path'):
    print("Directory is empty")
else:    
    print("Directory is not empty")
Run Code Online (Sandbox Code Playgroud)

但是,os.listdir()可以抛出异常,例如当给定的路径不存在时。因此,您需要涵盖这一点。

import os
dir_name = '/your/path'
if os.path.isdir(dir_name):
    if not os.listdir(dir_name):
        print("Directory is empty")
    else:    
        print("Directory is not empty")
else:
    print("Given directory doesn't exist")
Run Code Online (Sandbox Code Playgroud)

我希望它会对你有所帮助。


Fla*_*air 16

从 Python 3.5+ 开始,

if any(os.scandir(path)):
   print('not empty')
Run Code Online (Sandbox Code Playgroud)

这通常执行的速度比listdir(),因为scandir()是一个迭代器,不使用某些功能来获取给定文件的统计信息。

  • 提示:如果目录不存在,则 `scandir` 会抛出异常,因此请包含 `os.path.isdir` 检查。 (3认同)
  • @YaroslavNikitenko `with` 做同样的事情,并且在您链接的官方文档中也推荐 (3认同)

alg*_*ice 9

嗯,我只是尝试过您的代码将路径更改为空目录,并且确实为我打印了“空”,因此您的下载文件中一定有隐藏文件。您可以尝试循环浏览所有文件,并检查它们是否以“。”开头。或不。

编辑:

尝试这个。它为我工作。

if [f for f in os.listdir(downloadsFolder) if not f.startswith('.')] == []:
    print "empty"
else: 
    print "not empty"
Run Code Online (Sandbox Code Playgroud)


Ren*_*ene 9

正如穆斯卡亚 在这里提到的。从 Python 3.4(标准库)开始,您还可以使用pathlib 。但是,如果您只想检查文件夹是否为空,则应该查看此答案

from pathlib import Path

def directory_is_empty(directory: str) -> bool:
    return not any(Path(directory).iterdir())


downloadsFolder = '../../Downloads/'
if directory_is_empty(downloadsFolder):
    print "empty"
else:
    print "not empty"
Run Code Online (Sandbox Code Playgroud)


小智 7

试一试:

import os
dirContents = os.listdir(downloadsFolder)
if len(dirContents) == 0:
    print('Folder is Empty')
else:
    print('Folder is Not Empty')
Run Code Online (Sandbox Code Playgroud)


小智 -5

在 python 操作系统中,有一个名为 的函数listdir,它返回给定目录的文件内容的数组。所以如果数组为空,则意味着目录中没有文件。

这是一个代码片段;

import os 
path = '../../Downloads' 
if not os.listdir(path): 
    print "Empty" 
else: 
    print "Not empty"  
Run Code Online (Sandbox Code Playgroud)

希望这就是您正在寻找的。