#1 Thu 17 June 2010 09:59
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Comment dezipper, traiter, compiler, puis effacer
Aloha
Je souhaiterais procéder au traitement de X fichiers dxf aujourd'hui zippés.
Je dois en extraire tous les objets d'un calques, comparer ces objets avec ceux présents en base, et enrichir si besoin la base.
Je pense procéder ainsi :
dans le premier workbench :
- dézipper le premier fichier
- envoyer le dxf dans le second workbench
- attendre le résultat
- supprimer le dxf
dans le second workbench :
- recevoir le nom du fichier à traiter
- comparer les données
- écrire le fichier
Seulement voila, il me manque la partie unzip. Je ne sais absolument pas comment procéder (rien ne semble prévu).
je ne sais pas non plus comment faire pour ne produire qu'un seul fichier résultat dans lequel se trouveraient tous les objets de tous les dxf.
Est-ce un bon plan de travail selon vous ? Voyez-vous une meilleure solution ? Et auriez-vous des idées pour mes deux points bloquants (sachant que le format de sortie sera soit directement ma table oracle, soit un fichier apic).
D'avance, merci,
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#2 Thu 17 June 2010 10:16
Re: Comment dezipper, traiter, compiler, puis effacer
Pour dézipper tu peux utiliser SystemCaller et appeler un utilitaire de compression en mode console 7za.exe par exemple.
C'est primaire mais efficace.
Tu peux sans doute faire cela en Python avec PythonCaller.
Il n'est pas possible de produire un fichier DXF en plusieurs traitements.
Tu peux le faire en un seul après avoir décompacté tous tes dxf.
Mais pourquoi ne pas faire ton traitement directement à partir de tous les fichiers décompactés en utilisant toute l'arborescence dxf comme jeu de données source ?
Hors ligne
#3 Thu 17 June 2010 10:36
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: Comment dezipper, traiter, compiler, puis effacer
En fait je souhaite éviter de surcharger mon serveur avec tous les fichiers dézippés. Je vais prendre le risque.
Pour le Python ou le tcl, j'ai regardé, mais ça me semble bien ardu.
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#4 Thu 17 June 2010 11:25
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: Comment dezipper, traiter, compiler, puis effacer
Problème insoluble :
Je passe cette commande
Code:
E:\FME\7-ZipPortable\App\7-Zip\7z e "E:\FME\fichiers_donnees\test_cdr\20080122_stade georges hebert_4.zip" -oE:\FME\fichiers_donnees\test_cdr\temp\ *.dxf -r -y
au system caller. Et rien. Lorsque je la passe dans une console command, j'ai un résultat.
j'y perds mon latin.
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#5 Thu 17 June 2010 11:47
Re: Comment dezipper, traiter, compiler, puis effacer
essaye de remplacer les \ par des /
Hors ligne
#6 Thu 17 June 2010 13:19
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: Comment dezipper, traiter, compiler, puis effacer
J'ai essayé avec des chemins de type UNIX. Mais pas plus de résultats.
J'ai trouvé ceci. Mais même en recompilant :
Code:
proc Dzip {} { set d [ FME_GetAttribute path_directory_windows] set f [ FME_GetAttribute path_windows] set e [ FME_GetAttribute path_directory_windows] append e "temp\\" file mkdir $e set com_ "E:\\FME\\7-ZipPortable\\App\\7-Zip\\7z e " append com_ \" $f \" " -o" $e " *.dxf -r -y" puts $com_ }
ma commande n'est toujours pas exécutée par le systemCaller. De plus aucun message d'erreur dans le log.
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#7 Thu 17 June 2010 13:51
- dauzata
- Juste Inscrit !
- Lieu: Bruxelles
- Date d'inscription: 14 Oct 2005
- Messages: 7
Re: Comment dezipper, traiter, compiler, puis effacer
essaye de remplacer \ par \\
Code:
E: \\FME\\7-ZipPortable\\App\\7-Zip\\7z e "E:\\FME\\fichiers_donnees\\test_cdr\\20080122_stade georges hebert_4.zip" -oE:\\FME\\fichiers_donnees\\test_cdr\\temp\\ *.dxf -r -y
Hors ligne
#8 Thu 17 June 2010 14:34
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: Comment dezipper, traiter, compiler, puis effacer
En même temps si je ne mets pas
Code:
FME_SetAttribute command $com_
dans mon Tcl, il y avait peu de chance (1/infini) que cela fonctionne.
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#9 Thu 17 June 2010 14:41
- jaykayone
- Participant actif
- Date d'inscription: 15 Feb 2007
- Messages: 95
Re: Comment dezipper, traiter, compiler, puis effacer
bonjour,
avec un pythoncaller c'est assez simple:
import sys, zipfile, os, os.path
mettez ce code dans un pythoncaller et appelez la méthode unzip_file_into_dir.
passez lui des features portant deux attributs _dir et _file afin
qu'il sache quel fichier zip dézipper et où le dézipper.
def unzip_file_into_dir(feature):
dir=feature.getAttribute(_dir)
file=feature.getAttribute(_file)
os.mkdir(dir)
zfobj = zipfile.ZipFile(file)
for name in zfobj.namelist():
if name.endswith('/'):
os.mkdir(os.path.join(dir, name))
else:
outfile = open(os.path.join(dir, name), 'wb')
outfile.write(zfobj.read(name))
outfile.close()
-------------------
a+
j
--
Jeff Konnen
Hors ligne