PySide6.QtCore.QDirIterator

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是单向的(即,你不能以相反的顺序迭代目录)并且不允许随机访问。

注意

此类已弃用,并可能在Qt版本中移除。请改用QDirListing

另请参阅

QDir entryList()

class IteratorFlag

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

常量

描述

QDirIterator.NoIteratorFlags

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

QDirIterator.Subdirectories

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

QDirIterator.FollowSymlinks

当与Subdirectories结合使用时,此标志允许遍历指定路径的所有子目录,并跟随所有符号链接。符号链接循环(例如,“link” => “.” 或 “link” => “..”)会自动检测并忽略。

__init__(dir[, flags=QDirIterator.IteratorFlag.NoIteratorFlags])
Parameters:

构造一个QDirIterator,可以遍历dir的条目列表,使用dir的名称过滤器和常规过滤器。您可以通过flags传递选项来决定如何遍历目录。

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

dir 中的排序被忽略。

注意

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

另请参阅

hasNext() next() IteratorFlags

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

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

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

注意

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

另请参阅

hasNext() next() IteratorFlags

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

构建一个QDirIterator,它可以遍历path,没有名称过滤,并使用filters进行条目过滤。您可以通过flags传递选项来决定如何遍历目录。

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

注意

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

另请参阅

hasNext() next() IteratorFlags

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

  • nameFilters – 字符串列表

  • filtersFilter 的组合

  • flagsIteratorFlag 的组合

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

构造一个QDirIterator,可以使用nameFiltersfilters来遍历path。你可以通过flags传递选项来决定如何遍历目录。

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

例如,以下迭代器可用于迭代音频文件:

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

注意

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

另请参阅

hasNext() next() IteratorFlags setNameFilters()

fileInfo()
Return type:

QFileInfo

返回当前目录条目的QFileInfo

另请参阅

filePath() fileName()

fileName()
Return type:

字符串

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

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

另请参阅

filePath() fileInfo()

filePath()
Return type:

字符串

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

另请参阅

fileInfo() fileName()

hasNext()
Return type:

布尔

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

next()
Return type:

字符串

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

你可以调用fileName()filePath()来获取当前条目的文件名或路径,或者调用fileInfo()来获取当前条目的QFileInfo

如果你对QFileInfo感兴趣,请调用nextFileInfo()而不是next()。

nextFileInfo()
Return type:

QFileInfo

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

你可以调用fileName()filePath()来获取当前条目的文件名或路径,或者调用fileInfo()来获取当前条目的QFileInfo

当你只需要filePath()时,调用next()而不是nextFileInfo()。

path()
Return type:

字符串

返回迭代器的基本目录。