我試圖創建一個非常簡單的獨立應用程序,將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
它的工作謝謝:) – 2012-03-09 12:38:48
很高興能有幫助。我自己也曾多次用QStrings和Python字符串進行過類似的事情。 – 2012-03-09 16:14:27