Question

J'essaie de créer une application autonome très simple qui convertit les fichiers CATIA .dat en CSV pour ProCast.

J'ai une boîte de dialogue Qtwidget File pour obtenir le fichier .dat :

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

Pour charger les données du fichier .dat, j'utilise d'abord avec open(file) et une boucle while puis np.genfromtxt pour le reste du fichier comme ceci :

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))

Lorsque j'exécute la fonction my read avec un argument infile sous forme de chaîne que je tape, cela fonctionne parfaitement, mais lorsque j'essaie d'utiliser le chemin de fichier que la boîte de dialogue PyQt File m'a donné, numpy.genfromtxt échoue :

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

d'après ce que j'ai lu dans npyio.py, l'erreur se produit lorsqu'elle saute les lignes que j'ai spécifiées avec skip_header, mais je n'ai aucune idée de la raison pour laquelle cela échouerait maintenant et non lorsque je saisis le nom du fichier manuellement, puisque l'autre partie de la fonction de lecture fonctionne correctement. .

De plus, s'il s'agit d'un problème de nom de fichier, l'erreur ne serait-elle pas générée plus tôt ?Quelqu'un peut-il voir l'erreur (probablement stupide et grossière) que j'ai commise ?

J'utilise Python 2.7, Numpy 1.6.1 sur Windows 7.

Était-ce utile?

La solution

QFileDialog.getOpenFileName() renvoie une QString que vous transmettez à votre fonction.Si cela fonctionne bien lorsque vous transmettez le chemin sous forme de chaîne que vous tapez, je suppose que c'est une chaîne Python que vous entrez ?

Essayez de convertir le QString en chaîne Python et voyez si cela résout le problème.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top