Аналог os.walk в PyQt

Прежде чем я смогу продолжить реализацию рекурсивного поиска в dir/ файлах с некоторой фильтрацией для некоторых задач, я хочу знать, есть ли в Qt/PyQt аналог os.walk,

Основное приложение представляет собой приложение с графическим интерфейсом в PyQt4 и все текстовые поля в QStringS и путь объектов (файлов, каталогов) использует QFile, QDir, QFileinfo для манипуляций.

Под аналогом я подразумеваю быстрый и удобный рекурсивный инструмент обхода fs-дерева.

Должен ли я использовать os.walk или что-то намного быстрее и информативнее?

PS. Может быть, это может помочь мне, но я не уверен, что это более эффективно, чем os.walk,

1 ответ

Решение

Должен ли я использовать os.walk или что-то гораздо более быстрое и информативное?

Там нет, и я бы порекомендовал использовать 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;
}

или просто следующие для больших каталогов и вообще, так как это масштабируется лучше и удобнее:

#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

Затем вы получите все пройденные файлы. Вы можете начать настраивать его затем дальше в соответствии с вашими потребностями.

Другие вопросы по тегам