2012-03-08 67 views
1

我試圖創建一個非常簡單的獨立應用程序,將CATIA .dat文件轉換爲ProCast的csv。Numpy genfromtxt和PyQt文件處理(bug?)

我有一個Qtwidget文件對話框,獲得的.dat文件:

app = QtGui.QApplication(sys.argv) 
widget = QtGui.QWidget() 
widget.show() 
DATFILE = QtGui.QFileDialog.getOpenFileName(widget, 'Open File', '.') 
NODES, ELEMENTS, CONNECT = read(DATFILE) 

要從.dat文件我第一次打開(文件)使用加載數據和while循環,然後np.genfromtxt該文件的,像這樣的休息:

def read(infile): 
    with open(infile, 'r') as inf: 
     line = inf.readline() 
     while "NODES" not in line: 
      line = inf.readline() 
     inf.readline() 
     line = inf.readline() 
     list_nodes = [] 
     while '$' not in line: 
      x, y = line.split()[2:4] 
      z = inf.readline().split()[2] 
      list_nodes.append([float(x), float(y), float(z)]) 
      line = inf.readline() 
    num_nodes = len(list_nodes) 
    nodes = np.zeros((num_nodes, 4)) 
    nodes[:, 0] = np.arange(1, num_nodes+1) 
    for n in range(len(list_nodes)): 
     nodes[n, 1:] = np.fromiter(list_nodes[n], dtype=float) 
skipheader = np.size(nodes, axis=0)*2+12 
elements = np.genfromtxt(infile, dtype=int, comments='$', skip_footer=1, 
         skip_header=skiph, usecols=(3,4,5)) 

當我運行一個INFILE參數作爲一個字符串我輸入我的讀取功能,它完美的作品,但是當我嘗試使用PyQt的文件對話框給了文件路徑我,numpy.genfromtxt失敗:

Traceback (most recent call last): 
File "E:\Felix\PJE\BOLOS\bolos.py", line 62, in <module> 
NODES, ELEMENTS, CONNECT = lire(DATFILE) 
File "E:\Felix\PJE\BOLOS\bolos.py", line 36, in lire 
skip_header=skiph, usecols=(3,4,5)) 
File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 1265, in genfromtxt 
fhd.next() 
StopIteration 

從我在npyio.py中讀到的錯誤發生時,它跳過我用skip_header指定的行,但我不知道爲什麼它現在會失敗,而不是當我手動輸入文件名時,因爲另一部分閱讀功能正常工作。

此外,如果它是一個文件名的問題,錯誤是否會提前? 任何人都可以看到我犯的錯誤(可能是愚蠢的和粗暴的)?

我正在Python 2.7版,在Windows 7

回答

0

QFileDialog.getOpenFileName NumPy的1.6.1()返回您傳遞給你的函數爲QString。如果它的工作正常,當你將路徑作爲字符串傳遞時,我猜測它是你輸入的Python字符串?

嘗試將QString轉換爲Python字符串,看看是否能解決問題。

DATFILE = str(QtGui.QFileDialog.getOpenFileName(widget, 'Open File', '.'))

+0

它的工作謝謝:) – 2012-03-09 12:38:48

+0

很高興能有幫助。我自己也曾多次用QStrings和Python字符串進行過類似的事情。 – 2012-03-09 16:14:27