2012-10-17 27 views
1

我正在爲XML電子表格中的給定公式構建參考地圖的任務。例如,對於以下行:由python導航電子表格xml

<row> 
    <cell></cell> 
    <cell></cell> 
    <cell index="5"></cell> 
    <cell></cell> 
    <cell></cell> 
    <cell index="9"></cell> 
    <cell></cell> 
    ...... 
</row> 

如果我用enumerate(row.findall("cell"))它將返回a=[1, 2, 3, 4, 5, 6, 7]。但是,屬性index提供了特定單元的信息。也就是說,而不是a我應該得到b=[1, 2, 5, 6, 7, 9, 10](注意第三個單元是,所以它改變枚舉,類似的事情發生時,索引是後)。

我如何從ab?我想要更多Pythonic計劃。我現在有我類似C的語法(這我有點無聊的):

testcases = [[1, 2, 5, 4, 5, 9, 8], [5, 4, 5, 9, 8], [1, 2, 5, 4, 5, 9]] 

for cells in testcases: 
    first = None 
    for i, c in enumerate(cells): 
     if c>i+1: 
      first = c 

     if i>0 and c < cells[i-1]: 
      cells[i]=cells[i-1]+1 
     elif i>0 and c> cells[i-1]+1 and first is None: 
      first=c 
      for j in range(i)[::-1]: 
       cells[j]=c-1 
       c=c-1 
    print(cells) 
+0

措辭有點難以解析。請問,你能否重新說明它,並且在你的例子和背景下更清楚些? – gpoo

+0

我已編輯帖子。謝謝 – archlight

+0

該示例中的代碼似乎並未嘗試解決該問題。你是如何從上下文中給出的例子構造'testcases'的? – gpoo

回答

1

我不能完全理解你的問題,但是這可能是一個起點,你需要什麼:

matrix = [[1, 2, 5, 4, 5, 9, 8], [5, 4, 5, 9, 8], [1, 2, 5, 4, 5, 9]] 

for rowid, cellid, cell in [(rowid, cellid, cell) for rowid, row in enumerate(matrix) for cellid, cell in enumerate(row)]: 
    print "matrix[%d, %d]: %s" % (rowid, cellid, cell) 

這將遍歷整個矩陣,打印所有單元格,並讓您訪問所有行和單元格ID。

+0

抱歉誤會。我剛剛編輯了 – archlight

0

我認爲enumerate有點偏離你想解決的問題。您必須考慮 findall返回的列表elements,您可以從中檢索其屬性並使用它們填充值。

所以,給你給了XML樣本和你預計的輸出,下面的代碼片段可以讓你得到考慮指數(每當細胞有它)小區的名單:

from lxml import etree 

tag = etree.fromstring('''<row> 
          <cell></cell><cell></cell> 
          <cell index="5"> 
          </cell><cell></cell><cell></cell> 
          <cell index="9"></cell> 
          <cell></cell> 
          </row>''') 

index = 1 
result = [] 
for cell in tag.findall('cell'): 
    index = int(cell.attrib['index']) if cell.attrib.has_key('index') else index 
    result.append(index) 
    index += 1 

print result 

結果:

[1, 2, 5, 6, 7, 9, 10] 
+0

後我想知道[1,2,5,6,7,9,10]是如何得到的[1,2,5,6,7,9,10]。算法對於不是列表中的eq索引(數字)的數字,例如對其進行重新索引到下面的數字爲5,直到下一個索引9 – archlight

+0

它看起來像一個XY問題http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – gpoo