将QStringList(PyQt)转换为普通的python列表

Dam*_*anJ 3 python qstring list pyqt pyqt4

我想在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
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下:

> [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>]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我只是获取QString值以及看起来是内存位置的内容我希望实际的字符串本身和实际的目录值作为存储到python列表中的字符串.我这样做的主要原因是我已经编写了matplotlib和scipy的脚本,我需要的是这两个列表才能使它工作.

jdi*_*jdi 8

怎么样:

print map(str, nameList)
print "_____________________________"
print [str(f.fileName()) for f in fileList]
Run Code Online (Sandbox Code Playgroud)

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

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

您还可以将地图编写为列表理解:

print [str(name) for name in nameList]
Run Code Online (Sandbox Code Playgroud)

我还想在这里添加一些内容来解决可能导致整体混乱的问题.这就是python对象的打印表示与对象的实际之间的差异.

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

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