103-数据读写和文件管理-数据读写基本类-目录遍历QDirIterator

目录遍历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()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值