在我继续对某些任务进行一些过滤的递归目录/文件搜索之前,我想知道Qt / PyQt是否具有os.walk的类似物.
主应用程序是PyQt4中的GUI应用程序,并且QStrings和路径对象(文件,目录)中的所有文本字段均使用QFile,QDir,QFileinfo进行操作.
作为模拟,我的意思是快速方便的递归fs树遍历工具.
我应该使用os.walk还是更快,更有用的工具?
PS.也许this可以帮助我,但我不确定这是否比os.walk更有效.
解决方法:
Should I use os.walk or something much faster and more informative?
没有任何东西,如果可以的话,我建议在python中使用os.walk.它一样好.
这不仅是因为Qt没有这种方便的方法,而且即使您基于QDir编写自己的机制,也可以像使用os.walk一样手工制作所有三个变量.
如果您迫切希望使用Qt,则可以在下面我曾经用过的下面提供以下遍历功能.
main.cpp
#include <QDir>
#include <QFileInfoList>
#include <QDebug>
void traverse( const QString& dirname )
{
QDir dir(dirname);
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks | QDir::NoDot | QDir::NoDotDot);
foreach (QFileInfo fileInfo, dir.entryInfoList()) {
if (fileInfo.isDir() && fileInfo.isReadable())
traverse(fileInfo.absoluteFilePath());
else
qDebug() << fileInfo.absoluteFilePath();
}
}
int main()
{
traverse("/usr/lib");
return 0;
}
或简单地针对大型目录使用以下for,通常,因为它可以更好地扩展并且更加方便:
#include <QDirIterator>
#include <QDebug>
int main()
{
QDirIterator it("/etc", QDirIterator::Subdirectories);
while (it.hasNext())
qDebug() << it.next();
return 0;
}
main.pro
TEMPLATE = app
TARGET = qdir-traverse
QT = core
SOURCES += main.cpp
生成并运行
qmake && make && ./qdir-traverse
然后,将打印所有遍历的文件.您可以开始自定义它,然后进一步满足您的需求.