Обработка Numpy genfromtxt и PyQt файлов (ошибка?) - PullRequest
1 голос
/ 08 марта 2012

Я пытаюсь создать очень простое автономное приложение, которое преобразует файлы CATIA .dat в csv для ProCast.

У меня есть диалоговое окно Qtwidget File для получения файла .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 File, 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

fromто, что я прочитал в npyio.py, ошибка возникает, когда пропускаются строки, которые я указал с помощью skip_header, но я понятия не имею, почему это может произойти сбой, а не при вводе имени файла вручную, так как другая часть функции чтения работает нормально.

Также, если это проблема с именем файла, не возникнет ли ошибка раньше?Кто-нибудь может увидеть (возможно, глупую и грубую) ошибку, которую я сделал?

Я использую Python 2.7, Numpy 1.6.1 на Windows 7.

1 Ответ

0 голосов
/ 09 марта 2012

QFileDialog.getOpenFileName () возвращает QString, которую вы передаете своей функции.Если он работает нормально, когда вы передаете путь как строку, которую вы вводите, я предполагаю, что вы вводите строку Python?

Попробуйте преобразовать QString в строку Python и посмотрите, исправляет ли это вещи.

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

...