我正在尝试创建一个非常简单的独立应用程序,将 CATIA .dat 文件转换为用于 ProCast 的 csv。
我有一个 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 文件中加载数据,我首先使用 open(file) 和 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 指定的行时会发生错误,但我不知道为什么它现在会失败,而不是当我手动输入文件名时,因为 read 函数的另一部分工作正常.
另外,如果是文件名问题,是否会更早提出错误?谁能看到我犯的(可能是愚蠢和严重的)错误?
我在 Windows 7 上运行 python 2.7、Numpy 1.6.1。