目录遍历QDirIterator
QDirIterator类为目录条目列表提供了一个迭代器。
from PySide6.QtCore import QDirIterator
QDirIterator(dir: Union[PySide6.QtCore.QDir,str],flags: PySide6.QtCore.QDirIterator.IteratorFlag = Instance(PySide6.QtCore.QDirIterator.IteratorFlag.NoIteratorFlags))-> None
QDirIterator(path: str,filter: PySide6.QtCore.QDir.Filter,flags: PySide6.QtCore.QDirIterator.IteratorFlag = Instance(PySide6.QtCore.QDirIterator.IteratorFlag.NoIteratorFlags))-> None
QDirIterator(path: str,flags: PySide6.QtCore.QDirIterator.IteratorFlag = Instance(PySide6.QtCore.QDirIterator.IteratorFlag.NoIteratorFlags))-> None
QDirIterator(path: str,nameFilters: Sequence[str],filters: PySide6.QtCore.QDir.Filter = Instance(QDir.NoFilter),flags: PySide6.QtCore.QDirIterator.IteratorFlag = Instance(PySide6.QtCore.QDirIterator.IteratorFlag.NoIteratorFlags))-> None
QDirIterator官方说明
您可以使用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是单向的(即,您不能以相反的顺序迭代目录),并且不允许随机访问。
QDirIterator方法
方法 | 返回 | 描述 |
---|---|---|
fileInfo() | PySide6.QtCore.QFileInfo | 返回当前目录项的QFileInfo。 |
fileName() | str | 返回当前目录项的文件名,不带前缀路径。 当迭代单个目录时,此函数非常方便。使用"子目录"标志时,可以使用filePath()获取完整路径。 |
filePath() | str | 返回当前目录项的完整文件路径。 |
hasNext() | bool | 如果目录中至少还有一个条目,则返回true;否则,返回false。 |
next() | str | 将迭代器前进到下一个条目,并返回这个新条目的文件路径。如果hasNext()返回false,则此函数不执行任何操作,并返回一个空的QString。 您可以调用fileName()或filePath()来获取当前条目的文件名或路径,也可以调用fileInfo()来获得当前条目的QFileInfo。 如果您对QFileInfo感兴趣,请调用nextFileInfo()而不是next()。 |
nextFileInfo() | PySide6.QtCore.QFileInfo | 将迭代器前进到下一个条目,并返回这个新条目的文件信息。如果hasNext()返回false,则此函数不执行任何操作,并返回一个空的QFileInfo。 您可以调用fileName()或filePath()来获取当前条目的文件名或路径,也可以调用fileInfo()来获得当前条目的QFileInfo。 当您只需要filePath()时,请调用next()而不是nextFileInfo()。 |
path() | PySide6.QtCore.QFileInfo | 将迭代器前进到下一个条目,并返回这个新条目的文件信息。如果hasNext()返回false,则此函数不执行任何操作,并返回一个空的QFileInfo。 您可以调用fileName()或filePath()来获取当前条目的文件名或路径,也可以调用fileInfo()来获得当前条目的QFileInfo。 当您只需要filePath()时,请调用next()而不是nextFileInfo()。 |