Аналог os.walk в PyQt
Прежде чем я смогу продолжить реализацию рекурсивного поиска в dir/ файлах с некоторой фильтрацией для некоторых задач, я хочу знать, есть ли в Qt/PyQt аналог os.walk
,
Основное приложение представляет собой приложение с графическим интерфейсом в PyQt4 и все текстовые поля в QString
S и путь объектов (файлов, каталогов) использует 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
Затем вы получите все пройденные файлы. Вы можете начать настраивать его затем дальше в соответствии с вашими потребностями.