1

CATIA .dat ファイルを ProCast 用の csv に変換する非常に単純なスタンドアロン アプリを作成しようとしています。

.dat ファイルを取得するための Qtwidget ファイル ダイアログがあります。

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 で指定した行をスキップするとエラーが発生しますが、ファイル名を手動で入力したときに失敗する理由がわかりません。読み取り関数の他の部分は問題なく動作するためです。 .

また、ファイル名の問題である場合、エラーは以前に発生しませんか? 私が犯した(おそらく愚かでひどい)間違いを誰かが見ることができますか?

Windows 7でpython 2.7、Numpy 1.6.1を実行しています。

4

1 に答える 1

0

QFileDialog.getOpenFileName() は、関数に渡す QString を返します。入力した文字列としてパスを渡したときに問題なく動作する場合、入力しているのは Python 文字列だと思いますか?

QString を Python 文字列に変換してみて、問題が解決するかどうかを確認してください。

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

于 2012-03-09T09:53:58.993 に答える