2012-03-06 73 views
3

我想獲取qstringlist中的每個元素,並從列表中獲取原始數據,而不是pyqt將其存儲爲。將QStringList(PyQt)轉換爲正常的python列表

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已經寫好,我需要的是這兩個列表,使其工作。

回答

7

如何:

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

第一個只是每次的QString轉換爲字符串。

第二獲得的每一個QFile

的文件名()值,你也可以寫在地圖上以列表理解:

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。

+0

您的解決方案,以返回名稱工作的文件。第二部分工作在一定程度上,輸出是: [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')等等...]如何刪除「PyQt4 .QtCore.QString(u「只是遍歷每個元素並刪除該部分?有沒有更好的方法? – DamianJ 2012-03-06 02:51:00

+0

它與第一個示例相同。只需將生成的QString轉換爲字符串。更新 – jdi 2012-03-06 03:03:37

2

它可以幫助:

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

如果已經有新行字符串,這將無法工作 – 2015-11-10 22:02:41

+1

同意和編輯似乎合法嗎? – nvd 2015-11-11 11:20:46

+0

合法。哈哈:)這就是我如何解決的事情 – 2015-11-12 22:09:25