Bonjour,
Je cherche à construire un arbre xml à partir d'une arborescence de répertoires.Les répertoires sont bien représentés dans l'arbre. Maintenant, je souhaite ajouter certain fichiers dans l'arbre. Ces fichiers sont présents dans les répertoires terminaux:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
:~/Applications/ImagesTest/CytoProject/Jpp48/19/DAPI$ ls -latotal 3088
drwxr-xr-x 2 claire claire    4096 2003-07-10 16:32 .
drwxr-xr-x 5 claire claire    4096 2003-07-10 16:32 ..
-rw-r--r-- 1 claire claire 3150108 2001-08-28 20:02 1.tif
Pour l'instant le fichier xml ressemble à cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CytoGenet>
  <slide name="JPP50">
    <field name="5" ROI="x0,y0,x1,y1">
      <fluorochrome name="CY3"/>
      <fluorochrome name="DAPI"/>
    </field>
et je voudrais obtenir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CytoGenet>
  <slide name="JPP50">
    <field name="5" ROI="x0,y0,x1,y1">
      <fluorochrome name="CY3"/>
        <image name="1.TIF" exposure="100"/>
      <fluorochrome name="DAPI"/>
        <image name="1.TIF" exposure="10"/>
    </field>
Le code est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 31 13:30:22 2012
 
@author: 
"""
import lxml.etree as et
import os,re
 
def filtreImages(files):
    filtlist=[]
    #a file name like 1.TIF or 1.tif
    regex=re.compile('([1-9]+)\.(TIF|tif)$')
    if len(files)>0:
        for f in files:
            result=regex.search(f)
            if result<>None:
                #print f
                filtlist.append(f)
 
    #print filtlist
    return filtlist
 
def makeNodes(node_dirs, root, leveldirlist, root_level,files):
    code={0:'slide',1:'field',2:'fluorochrome',3:'TooDeep'}
    for d in leveldirlist:
        #child = et.Element("node{0}".format(root_level), name=d)
        child = et.Element(code[root_level], name=d)
        if code[root_level]=='field':
            child.set('ROI','x0,y0,x1,y1')
        nodes_dirs[os.path.join(root, d)] = child
        nodes_dirs[root].append(child)
        if len(files)>0:        
            for image in files:
                print " root",root," root_level",root_level," image",image
                child=et.Element("image",name=image, position='-1,-1', exposure='0.0')
                nodes_dirs[os.path.join(root, d)] = child
                nodes_dirs[root].append(child)
 
level={}            
if __name__ == '__main__':
    topdir = '/home/claire/Applications/ImagesTest/CytoProject'
    projetxml = et.Element('CytoGenet')  # racine
    parent = projetxml
    nodes_dirs = {topdir: parent}
    ln_root = len(topdir)
 
    for root, dirs, files in os.walk(topdir):
        lvl = root[ln_root:].count(os.path.sep)
        #print nodes_dirs
        filtered=filtreImages(files)
        #print filtered
        makeNodes(nodes_dirs, root, dirs, lvl,filtered)
 
 
    print(et.tostring(projetxml,pretty_print=True))
    print projetxml.getchildren()[0].get("name")
    print projetxml.getchildren()[1].get("name")
    slides=projetxml.getchildren()
 
    metaphases1=slides[0].getchildren()
    metaphases2=slides[1].getchildren()
    for m in metaphases2:
        print m.get("name")
Il est clair que ça coince ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 if len(files)>0:        
            for image in files:
                print " root",root," root_level",root_level," image",image
                child=et.Element("image",name=image, position='-1,-1', exposure='0.0')
                nodes_dirs[os.path.join(root, d)] = child
                nodes_dirs[root].append(child)
Merci par avance de vos conseils.

Jean-Patrick