Преобразование QStringList (PyQt) в обычный список Python - PullRequest
3 голосов
/ 06 марта 2012

Я хочу взять каждый элемент в списке qstringlist и получить необработанные данные из списка, а не то, что pyqt хранит как.

def find(self):
        self.foundFileList.setRowCount(0)

        fileName = self.inputFileName.currentText()
        path = self.directoryPath.currentText()
        maxSize = Decimal(self.maxFileSize.value())
        i = 0

        self.updateComboBox(self.inputFileName)
        self.updateComboBox(self.directoryPath)
        self.currentDir = QtCore.QDir(path)

        if not fileName:
            fileName = "*"

        allFiles = self.currentDir.entryList([fileName],
            QtCore.QDir.Files | QtCore.QDir.NoSymLinks, QtCore.QDir.Size)

        files = self.currentDir.entryList([fileName],
            QtCore.QDir.Files | QtCore.QDir.NoSymLinks, QtCore.QDir.Size)

        for fn in allFiles:
            file = QtCore.QFile(self.currentDir.absoluteFilePath(fn))
            size = Decimal((QtCore.QFileInfo(file).size() + 1023) / 1024)

            if size > maxSize:
                files.removeAt(i)

            i += 1

        self.showFiles(files)

def showFiles(self, files):
        ##Clean house before new round of files is displayed
        del nameList[0:len(nameList)]
        del fileList[0:len(fileList)]
        i = 0
        for fn in files:
            nameList.append(fn)
            file = QtCore.QFile(self.currentDir.absoluteFilePath(fn))
            fileList.append(file)
            size = QtCore.QFileInfo(file).size()
            ##Some other stuff below here but it's irrelevant

        print nameList
        print "_____________________________"
        print fileList

Вывод, который я получаю, выглядит следующим образом:

> [PyQt4.QtCore.QString(u'data - Copy (2).txt'),
> PyQt4.QtCore.QString(u'data - Copy (3).txt'),
> PyQt4.QtCore.QString(u'data - Copy (4).txt'),
> PyQt4.QtCore.QString(u'data - Copy (5).txt'),
> PyQt4.QtCore.QString(u'data - Copy (6).txt'),
> PyQt4.QtCore.QString(u'data - Copy.txt'),
> PyQt4.QtCore.QString(u'data.txt')]
> _____________________________ 
> [<PyQt4.QtCore.QFile object at 0x000000000B28C400>, 
> <PyQt4.QtCore.QFile object at
> 0x000000000B28C598>, <PyQt4.QtCore.QFile object at
> 0x000000000B28C730>, <PyQt4.QtCore.QFile object at
> 0x000000000B28C8C8>, <PyQt4.QtCore.QFile object at
> 0x000000000B28CA60>, <PyQt4.QtCore.QFile object at
> 0x000000000B28CBF8>, <PyQt4.QtCore.QFile object at
> 0x000000000B28CD90>]

Как вы можете видеть, я просто получаю значения QString и то, что выглядит как ячейки памяти, я хочу, чтобы сами строки и фактические значения каталогов в виде строк сохранялись в списке Python. Основная причина, по которой я это делаю, заключается в том, что у меня уже есть скрипт для matplotlib и scipy, и все, что мне нужно, это два списка, чтобы он работал.

Ответы [ 2 ]

8 голосов
/ 06 марта 2012

Как насчет:

print map(str, nameList)
print "_____________________________"
print [str(f.fileName()) for f in fileList]

Первый просто преобразует каждую строку QString в строку.

Второй получает значение fileName () каждого QFile

Вы также можете написать карту в виде списка:

print [str(name) for name in nameList]

Я также хотел бы добавить кое-что здесь для решения проблемы, которая может вызвать общую путаницу. И в этом разница между напечатанным представлением объекта python и фактическим значением объекта.

Любой объект python может определить метод __repr__(), который будет возвращать строку, чтобы обеспечить визуальное печатное представление этого объекта. Когда вы распечатываете эти объекты, это то же самое, что и вызов print repr(myObject). Вы печатаете QStringList, который содержит QStrings. QStrings напечатал repr, чтобы показать вам путь к модулю, а затем приложенное значение Юникода. Объект по-прежнему является QString и имеет весь метод QString. Чтобы увидеть другое напечатанное значение, вы должны преобразовать его, скажем, в строковый объект. Repr строки - это просто собственное необработанное строковое значение.

Я хотел упомянуть этот бит в ответ на ваш комментарий, спрашивая, нужно ли вам войти и удалить PyQt4.QtCore.QString(u биты из каждого элемента, предполагая, что они теперь являются строковым объектом с ненужными данными. Опять же, это только repr QString, который печатается.

2 голосов
/ 20 июля 2014

Может помочь:

pythonList = str(qStringList.join("<join>")).split("<join>")
...