2011-08-05 3 views
2

Je souhaite séparer une chaîne séparée par des points-virgules afin que je puisse stocker chaque chaîne individuelle à utiliser comme texte entre balises XML en utilisant Python. La valeur de chaîne ressemble à ceci:Séparer les chaînes séparées par des points-virgules en Python

08-26-2009;08-27-2009;08-29-2009 

Ils sont des dates simplement stockées sous forme de valeurs de chaîne

Je veux itérer chaque valeur, magasin à une variable et appeler la variable dans le code suivant à la fin:

for element in iter: 
    # Look for a tag called "Timeinfo" 
    if element.tag == "timeinfo": 
     tree = root.find(".//timeinfo") 
     # Clear all tags below "timeinfo" 
     tree.clear() 
     element.append(ET.Element("mdattim")) 
     child1 = ET.SubElement(tree, "sngdate") 
     child2 = ET.SubElement(child1, "caldate1") 
     child3 = ET.SubElement(child1, "caldate2") 
     child4 = ET.SubElement(child1, "caldate3") 
     child2.text = FIRST DATE VARIABLE GOES HERE 
     child2.text = SECOND DATE VARIABLE GOES HERE 
     child2.text = THIRD DATE VARIABLE GOES HERE 

Toute aide est appréciée.

+0

Votre échantillon a une erreur btw, je doute que vous voulez définir le contenu de child2 3 fois. – pyroscope

+0

Oh merci. Mon erreur. J'ai ajouté ceux-ci lorsque j'ai mis en place un rapide exemple de ce que j'essayais d'accomplir (copier et coller). Vous avez raison, ils devraient être child2, child3, child4. – Mike

Répondre

9

de Split retourne une liste comme suit

>>> a="08-26-2009;08-27-2009;08-29-2009" 
>>> a_split = a.split(';') 
>>> a_split 
['08-26-2009', '08-27-2009', '08-29-2009'] 
2
child2.text, child3.text, child4.text = three_dates_text.split(';') 
+0

Ceci est proche de ce que je voulais, mais aller de l'avant les valeurs dans le script varient de 3 dates à 4 ou plus ou moins. Merci beaucoup pour le poste. – Mike

+1

Ensuite, amender votre question s'il vous plaît, vous ne pouvez pas attendre de nous que nous devinions les faits. En outre, l'épissage d'une liste est base Python, vous avez lu le tutoriel CoULD ... – pyroscope

2

Lorsque vous avez des variables nommées child1, child2, enfant3 et enfant4, qui est une odeur de code qui laisse deviner que vous que vous devriez utiliser une liste ou un autre type de collection.

children = [ET.SubElement(tree, "sngdate")] 
children += [ET.SubElement(children[0], "caldate%s" % i) for i in xrange(3)] 

Ce qui avait été quatre variables distinctes devient une liste avec quatre éléments. Maintenant, vous pouvez aller à mettre à jour les dates de chacun des éléments:

dates = "08-26-2009;08-27-2009;08-29-2009" 

for i, d in enumerate(dates.split(";")): 
    children[i+1].date = d 

Vous pouvez adapter cela fonctionne pour un certain nombre d'articles, même si vous ne connaissez pas le nombre d'éléments à l'avance.

+0

C'est une approche très intéressante. Merci de l'avoir posté. Cela semble être une meilleure approche que la mienne. J'ai une question ou 2. Tout d'abord si, dans la première instance de "caldate" il y aura une étiquette d'addition appelée "time" dans la même hiérarchie que "caldate" mais il ne se produira pas d'autres itérations, comment Je construis ça? Mon XMl devrait ressembler à ceci: – Mike

+0

08-26-2009 08-27-2009 08-29-2009 Mike

+0

Désolé, bien que je puisse mettre en forme des balises XML dans un commentaire. Apparemment non... – Mike

Questions connexes