class QDirIterator#

QDirIterator 类提供了一个目录条目列表的迭代器。更多

概述#

方法#

注意

本文档可能包含自动从 C++ 转换来的 Python 段落。我们始终欢迎对段落翻译的贡献。如果您发现翻译存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单的方式来告诉我们。

详细描述#

警告

本节包含自动从 C++ 转换来的 Python 段落,可能包含错误。

您可以使用 QDirIterator 来逐个导航目录条目。它类似于 entryList()entryInfoList() ,但因为它一次只列出一条条目而不是一次性列出所有条目,因此它具有更好的可扩展性,更适合大目录。它还支持递归列出目录内容,并跟随符号链接。与 entryList() 不同,QDirIterator 不支持排序。

构造函数 QDirIterator 接受一个 QDir 或目录参数。构造后,迭代器位于第一个目录条目前。以下是逐个顺序遍历所有条目的方法

it = QDirIterator("/etc", QDirIterator.Subdirectories)
while it.hasNext():
    dir = it.next()
    print(dir)
    # /etc/.
    # /etc/..
    # /etc/X11
    # /etc/X11/fs
    # ...

以下是如何找到并读取由名称过滤的所有文件的方法(递归查找)

it = QDirIterator("/sys", QStringList() << "scaling_cur_freq", QDir.NoFilter, QDirIterator.Subdirectories)
while it.hasNext():
    f = QFile(it.next())
    f.open(QIODevice.ReadOnly)
    print(f.fileName(), f.readAll().trimmed().toDouble() / 1000, "MHz")

next()nextFileInfo() 函数推进迭代器并返回下一个目录条目的路径或 QFileInfo。您还可以调用 filePath()fileInfo() 来获取当前文件路径或 QFileInfo 而不需要首先推进迭代器。函数 fileName() 仅返回文件名,类似于函数 entryList() 的工作方式。

与Qt的容器迭代器不同,QDirIterator 是单向的(即不能以相反的顺序迭代目录)并且不允许随机访问。

参考以下内容

QDir entryList()

class IteratorFlag#

(继承自 enum.Flag) 该枚举描述了可以组合起来配置 QDirIterator 操作行为的标志。

常量

描述

QDirIterator.NoIteratorFlags

默认值,表示没有标志。迭代器将返回指定路径的条目。

QDirIterator.Subdirectories

列出所有子目录中的条目。

QDirIterator.FollowSymlinks

与 Subdirectories 组合时,此标志可用于迭代指定路径的所有子目录,并跟随所有符号链接。将自动检测并忽略符号链接循环(例如,“link” => “.” 或 “link” => “..”)。

__init__(dir[, flags=QDirIterator.IteratorFlag.NoIteratorFlags])#
参数:

构建一个 QDirIterator,可迭代 dir 的条目列表,使用 dir 的名称过滤器和正则过滤器。您可以通过 flags 传递选项来决定如何迭代目录。

默认情况下,flagsNoIteratorFlags ,这与 entryList() 中的行为相同。

dir 中的排序被忽略。

注意

要列出指向不存在文件的符号链接,必须将 System 传递给标志。

参考以下内容

hasNext() next() IteratorFlags

__init__(path, filter[, flags=QDirIterator.IteratorFlag.NoIteratorFlags])
参数:

构建一个可以遍历 pathQDirIterator,不进行名称过滤,并对条目进行过滤。您可以通过 flags 传递选项以决定如何遍历目录。

默认情况下,filtersNoFilter ,并且 flagsNoIteratorFlags ,这提供了与 entryList() 相同的行为。

注意

要列出指向不存在文件的符号链接,必须将 System 传递给标志。

参考以下内容

hasNext() next() IteratorFlags

__init__(path[, flags=QDirIterator.IteratorFlag.NoIteratorFlags])
参数:

构建一个可以遍历 pathQDirIterator。您可以通过 flags 传递选项以决定如何遍历目录。

默认情况下,flagsNoIteratorFlags ,这与 entryList() 中的行为相同。

注意

要列出指向不存在文件的符号链接,必须将 System 传递给标志。

参考以下内容

hasNext() next() IteratorFlags

__init__(path, nameFilters[, filters=QDir.NoFilter[, flags=QDirIterator.IteratorFlag.NoIteratorFlags]])
参数:
  • path – 字符串

  • nameFilters – 字符串列表

  • filtersFilter 的组合

  • flagsIteratorFlag 的组合

警告

本节包含自动从 C++ 转换来的 Python 段落,可能包含错误。

构建一个可以遍历 pathQDirIterator,使用 nameFiltersfilters。您可以通过 flags 传递选项以决定如何遍历目录。

默认情况下,flagsNoIteratorFlags ,这提供了与 entryList() 相同的行为。

例如,以下迭代器可以用来遍历音频文件

def audioFileIt(audioPath,{"*.mp3","*.wav"},QDir.Files):

注意

要列出指向不存在文件的符号链接,必须将 System 传递给标志。

参考以下内容

hasNext() next() IteratorFlags setNameFilters()

fileInfo()#
返回类型:

QFileInfo

返回当前目录条目的QFileInfo

参考以下内容

filePath() fileName()

fileName()#
返回类型:

字符串

返回当前目录条目的文件名,不包含路径前缀。

当迭代单个目录时,此函数很方便。当使用Subdirectories标志时,可以使用filePath()来获取完整路径。

参考以下内容

filePath() fileInfo()

filePath()#
返回类型:

字符串

返回当前目录条目的完整文件路径。

参考以下内容

fileInfo() fileName()

hasNext()#
返回类型:

布尔类型

如果目录中至少还有一个条目,则返回true;否则返回false。

next()#
返回类型:

字符串

将迭代器移动到下一个条目,并返回该新条目文件的路径。如果 hasNext() 返回 false,此函数不执行任何操作且返回一个空 QString

您可以通过调用 fileName()filePath() 来获取当前条目的文件名或路径,或者调用 fileInfo() 来获取当前条目的 QFileInfo 对象。

如果您感兴趣的是 QFileInfo,请使用 nextFileInfo() 而不是 next()。

nextFileInfo()#
返回类型:

QFileInfo

将迭代器移动到下一个条目,并返回该新条目的文件信息。如果 hasNext() 返回 false,此函数不执行任何操作且返回一个空的 QFileInfo

您可以通过调用 fileName()filePath() 来获取当前条目的文件名或路径,或者调用 fileInfo() 来获取当前条目的 QFileInfo 对象。

当您只需要 filePath() 时,请使用 next() 而不是 nextFileInfo()。

path()#
返回类型:

字符串

返回迭代器的基目录。