首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用python 3检查文件夹是否包含文件

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

Stack Overflow用户
提问于 2014-09-05 05:36:53
回答 8查看 50.2K关注 0票数 43

我到处寻找这个答案,但没有找到。

我正在尝试想出一个脚本,它将搜索一个特定子文件夹,然后检查它是否包含任何文件,如果包含,则写出该文件夹的路径。我已经弄清楚了子文件夹搜索部分,但是检查文件把我难住了。

我发现了许多关于如何检查文件夹是否为空的建议,我尝试修改脚本以检查文件夹是否为空,但我没有得到正确的结果。

下面是最接近的脚本:

代码语言:javascript
复制
for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
    print(dirpath)

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

代码语言:javascript
复制
if os.listdir(dirpath)!=[]:
    print(dirpath)

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

如果有人能给我指出正确的方向,我将不胜感激。

这是针对Python 3.4的,如果重要的话。

谢谢你能给我的任何帮助。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-09-05 05:41:57

‘'files’已经告诉你目录中有什么了。只需检查一下:

代码语言:javascript
复制
for dirpath, dirnames, files in os.walk('.'):
    if files:
        print(dirpath, 'has files')
    if not files:
        print(dirpath, 'is empty')
票数 35
EN

Stack Overflow用户

发布于 2019-01-16 20:15:20

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

代码语言:javascript
复制
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('*')))

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

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

类似的想法结果{}和[]给出了相同的结果:

票数 26
EN

Stack Overflow用户

发布于 2014-09-05 06:00:33

您可以使用Python3.4中引入的新pathlib库来递归提取所有非空子目录,例如:

代码语言:javascript
复制
import pathlib

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

因为你无论如何都要遍历树,所以我们构建了一组父目录,其中存在一个文件,这将导致一组包含文件的目录-然后对结果执行您希望的操作。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25675352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档