J'écris du code pour convertir un fichier CSV en XML. Supposons que j'ai une seule liste comme:Compréhension de liste Python avec plusieurs éléments de longueur variable?
input = ['name', 'val', 0, \
'name', 'val', 1, 'tag', 'val', \
'name', 'val', 2, 'tag', 'val', 'tag', 'val', \
'name', 'val', 0]
Chaque tranche de cette liste commençant par « nom » désigne un élément avec un nom, une valeur et un nombre variable de paires option-valeur de la variable.
Je veux transformer cela en:
output = [['name', 'val', []],
['name', 'val', ['tag', 'val']],
['name', 'val', ['tag', 'val', 'tag', 'val']],
['name', 'val', []]]
Pas besoin de séparer les paires de valeurs de balise dans tuples, cela est géré dans une méthode distincte. J'ai une solution, mais ce n'est pas très pythonique:
output=[]
cursor=0
while cursor < len(input):
name=input[cursor]
val=input[cursor+1]
ntags=int(input[cursor+2])
optslice=input[cursor+3:cursor+3+2*ntags]
cursor = cursor+3+2*ntags
print name, val, ntags, optslice, cursor
output.append([name, val, optslice])
print output
> name val 0 [] 3
> name val 1 ['tag', 'val'] 8
> name val 2 ['tag', 'val', 'tag', 'val'] 15
> name val 0 [] 18
> [['name', 'val', []], ['name', 'val', ['tag', 'val']], ['name', 'val', ['tag', 'val', 'tag', 'val']], ['name', 'val', []]]
Je pense que je pourrais probablement le faire comme la compréhension de la liste, mais la longueur variable de chaque élément est de me jeter pour une boucle. L'entrée est analysée à partir d'un CSV, et je peux changer le format pour mieux adapter une solution différente. Des idées?