4

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 つのリストだけだからです。

4

2 に答える 2

8

どうですか:

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

最初のものは、各QStringを文字列に変換するだけです。

2つ目は、各QFileのfileName()値を取得します

リスト内包表記としてマップを作成することもできます。

print [str(name) for name in nameList]

また、全体的な混乱を引き起こしている可能性のある問題に対処するために、ここに何かを追加したいと思いました。これが、Pythonオブジェクトの印刷された表現とオブジェクトの実際のの違いです。

__repr__()すべてのPythonオブジェクトは、文字列を返すメソッドを定義して、そのオブジェクトの視覚的な印刷表現を提供できます。これらのオブジェクトを印刷する場合は、を呼び出すのと同じprint repr(myObject)です。QStringsを含むQStringListを出力します。QStringsで出力されるreprは、モジュールパスを表示し、次に囲まれたUnicode値を表示します。オブジェクトはまだQStringであり、QStringのすべてのメソッドを持っています。別の出力値を表示するには、それをたとえば文字列オブジェクトに変換する必要があります。文字列のreprは、たまたまそれ自体の生の文字列値です。

私はあなたのコメントに応えてこのビットに言及したいと思いました。PyQt4.QtCore.QString(u各要素からビットを削除する必要があるかどうかを尋ね、それらがジャンクデータを持つ文字列オブジェクトになったことを示唆しました。繰り返しますが、これはQStringのreprのみであり、印刷されます。

于 2012-03-06T02:44:39.460 に答える