【问题标题】:Converting a QStringList (PyQt) into a normal python list将 QStringList (PyQt) 转换为普通的 python 列表
【发布时间】:2012-03-06 02:38:51
【问题描述】:

我想获取 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 脚本,我只需要这两个列表来使其工作。

【问题讨论】:

    标签: python list pyqt pyqt4 qstring


    【解决方案1】:

    怎么样:

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

    第一个只是将每个 QString 转换为字符串。

    第二个获取每个QFile的fileName()值

    您也可以将地图写成列表推导式:

    print [str(name) for name in nameList]
    

    我还想在此处添加一些内容,以解决可能导致整体混乱的问题。这就是python对象的打印表示和对象的实际之间的区别。

    任何 python 对象都可以定义一个__repr__() 方法,该方法将返回一个字符串,以提供该对象的可视化打印表示。当您打印出这些对象时,它与调用print repr(myObject) 相同。你打印一个包含 QStrings 的 QStringList。 QStrings 打印的 repr 是向您显示模块路径,然后显示包含的 unicode 值。该对象仍然是一个 QString 并且具有 QString 的所有方法。要查看不同的打印值,您必须将其转换为字符串对象。字符串的 repr 恰好是它自己的原始字符串值。

    我想在回应您的评论时提及这一点,询问您是否应该进入并从每个元素中删除 PyQt4.QtCore.QString(u 位,这表明它们现在是带有垃圾数据的字符串对象。同样,这只是正在打印的 QString 的 repr。

    【讨论】:

    • 您返回文件名的解决方案有效。第二部分在一定程度上起作用,输出是: [PyQt4.QtCore.QString(u'D:/Dropbox/Public/Data Processor/src/data - Copy (2).txt'), PyQt4.QtCore.QString( u'D:/Dropbox/Public/Data Processor/src/data - Copy (3).txt'),PyQt4.QtCore.QString(u'D:/Dropbox/Public/Data Processor/src/data - Copy (4 ).txt'), PyQt4.QtCore.QString(u'D:/Dropbox/Public/Data Processor/src/data - Copy (5).txt'), etc...] 我将如何删除“ PyQt4.QtCore .QString(u " 只是遍历每个元素并删除那部分?有更好的方法吗?
    • 同第一个例子。只需要将生成的 QString 转换为字符串。更新
    【解决方案2】:

    可能会有帮助:

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

    【讨论】:

    • 好吧,可以说如果“”在实际字符串中,它将失败。所以对于所有看到它的人来说; “谨防”。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2012-01-06
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2013-08-28
    相关资源
    最近更新 更多