我到处寻找这个答案,但没有找到。
我正在尝试想出一个脚本,它将搜索一个特定子文件夹,然后检查它是否包含任何文件,如果包含,则写出该文件夹的路径。我已经弄清楚了子文件夹搜索部分,但是检查文件把我难住了。
我发现了许多关于如何检查文件夹是否为空的建议,我尝试修改脚本以检查文件夹是否为空,但我没有得到正确的结果。
下面是最接近的脚本:
for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
print(dirpath)
这将列出所有空的子文件夹,但如果我尝试将其更改为:
if os.listdir(dirpath)!=[]:
print(dirpath)
它将列出所有内容--而不仅仅是那些包含文件的子文件夹。
如果有人能给我指出正确的方向,我将不胜感激。
这是针对Python 3.4的,如果重要的话。
谢谢你能给我的任何帮助。
发布于 2014-09-05 05:41:57
‘'files’已经告诉你目录中有什么了。只需检查一下:
for dirpath, dirnames, files in os.walk('.'):
if files:
print(dirpath, 'has files')
if not files:
print(dirpath, 'is empty')
发布于 2019-01-16 20:15:20
添加到@Jon Clements的pathlib答案中,我想用pathlib检查文件夹是否为空,但不创建set:
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
类似的想法结果{}和[]给出了相同的结果:
发布于 2014-09-05 06:00:33
您可以使用Python3.4中引入的新pathlib
库来递归提取所有非空子目录,例如:
import pathlib
root = pathlib.Path('some/path/here')
non_empty_dirs = {str(p.parent) for p in root.rglob('*') if p.is_file()}
因为你无论如何都要遍历树,所以我们构建了一组父目录,其中存在一个文件,这将导致一组包含文件的目录-然后对结果执行您希望的操作。
https://stackoverflow.com/questions/25675352
复制相似问题