如何使用python 3检查文件夹是否包含文件

Hea*_*her 26 python python-3.4

我到处寻找这个答案却找不到.

我正在尝试创建一个脚本来搜索特定的子文件夹,然后检查它是否包含任何文件,如果是,则写出文件夹的路径.我已经找到了子文件夹搜索部分,但检查文件是困扰我.

我找到了关于如何检查文件夹是否为空的多个建议,并且我已经尝试修改脚本以检查文件夹是否为空,但是我没有得到正确的结果.

这是最接近的脚本:

for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
    print(dirpath)
Run Code Online (Sandbox Code Playgroud)

这将列出所有空的子文件夹,但如果我尝试将其更改为:

if os.listdir(dirpath)!=[]:
    print(dirpath)
Run Code Online (Sandbox Code Playgroud)

它将列出所有内容 - 而不仅仅是那些包含文件的子文件夹.

如果有人能指出我正确的方向,我真的很感激.

如果重要的话,这适用于Python 3.4.

感谢你给与我的帮助.

tde*_*ney 25

'files'已经告诉你目录中有什么.检查一下:

for dirpath, dirnames, files in os.walk('.'):
    if files:
        print(dirpath, 'has files')
    if not files:
        print(dirpath, 'is empty')
Run Code Online (Sandbox Code Playgroud)

  • 对于那些挣扎的人:`dir = r'C:\ Users\x\Desktop\folder name'` then`for dirpath,dirnames,os.walk(dir)中的文件:`和其余的代码 (3认同)

Pra*_*iel 21

添加到@Jon Clements 的 pathlib 答案中,我想使用 pathlib 检查文件夹是否为空,但不创建集合:

from pathlib import Path

# shorter version from @vogdb
is_empty = not any(Path('some/path/here').iterdir())

# similar but unnecessary complex
is_empty = not bool(sorted(Path('some/path/here').rglob('*')))
Run Code Online (Sandbox Code Playgroud)

vogdb 方法尝试遍历给定目录中的所有文件。如果没有文件,any() 将为 False。我们用 not 否定它,所以 is_empty 如果没有文件则为 True,如果有文件则为 False。

sorted(Path(path_here).rglob('*')) 返回已排序 PosixPah 项目的列表。如果没有项目,则返回一个空列表,即 False。因此,如果路径为空,则 is_empty 将为 True,如果路径有内容则为 false

类似的想法结果 {} 和 [] 给出了相同的结果: 在此处输入图片说明

  • 这一个的想法是相同的 `any(Path(''some/path/here'').iterdir())` (3认同)
  • 很好的解决方案。两点注意:可以使用“list()”代替“sorted()”来提高计算效率,因为顺序并不重要。恕我直言, `len(list(Path(p).rglob('*'))) == 0` 而不是 `bool` 更具可读性(或者检查 `next` 并捕获异常)。 (3认同)

Jon*_*nts 11

您可以使用pathlibPython 3.4中引入的新库以递归方式提取所有非空子目录,例如:

import pathlib

root = pathlib.Path('some/path/here')
non_empty_dirs = {str(p.parent) for p in root.rglob('*') if p.is_file()}
Run Code Online (Sandbox Code Playgroud)

因为无论如何你必须走树,我们构建了一组父目录,其中存在一个文件,该目录产生一组包含文件的目录 - 然后按照你的意愿对结果进行操作.


use*_*ser 8

如果可以删除目录,则可以使用以下命令:

my_path = os.path.abspath("something")               
try:
    os.rmdir(my_path)
    is_empty = True
    # Do you need to keep the directory? Recreate it!
    # os.makedirs(my_path, exist_ok=True)
except OSError:
    is_empty = False

if is_empty:
    pass
Run Code Online (Sandbox Code Playgroud)

os.rmdir只删除一个目录,如果它是空的,否则它抛出OSERROR例外。

您可以在以下位置找到有关此问题的讨论:

  1. https://bytes.com/topic/python/answers/157394-how-determine-if-folder-empty

例如,当您打算执行 git clone 时删除一个空目录是可以的,但如果您事先检查目录是否为空,则删除一个空目录就可以了,因此您的程序不会抛出空目录错误。


Gav*_*hen 5

检查文件夹是否包含文件:

import os
import shutil

if len(os.listdir(folder_path)) == 0: # Check is empty..
    shutil.rmtree(folder_path) # Delete..
Run Code Online (Sandbox Code Playgroud)