在pythondi中将表头指定为键

2024-09-28 21:54:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前使用Python填充一个列表,其中包含所有表行值。在

现在,我想在每一行数据的末尾加一个分隔符,并使用表头作为键。我不知道如何最好地表示字典中的表数据。但我唯一的要求是可以按表和行标题(行标题是每行的第一个值)查询它。在

对于表。。。在

<table class="confluenceTable tablesorter">
    <thead>
        <tr class="sortableHeader">
            <th data-column="0" class="confluenceTh sortableHeader tablesorter-headerSortDown">
                <div class="tablesorter-header-inner">First Name</div>
            </th>
            <th data-column="1" colspan="1" class="confluenceTh sortableHeader">
                <div class="tablesorter-header-inner">Last Name</div>
            </th>
            <th data-column="2" class="confluenceTh sortableHeader">
                <div class="tablesorter-header-inner">Function</div>
            </th>
        </tr>
    </thead>
    <tbody class="">
        <tr>
            <td colspan="1" class="confluenceTd">John</td>
            <td colspan="1" class="confluenceTd">Smith</td>
        </tr>
        <tr>
            <td colspan="1" class="confluenceTd"><span>Jane</span></td>
            <td colspan="1" class="confluenceTd"><span>Doe</span></td>
        </tr>
    </tbody>
</table>

我在我的简化表中包括了colspan、class等,以防它们有用。在

^{pr2}$

用上面的python我可以得到

[u'John',
 u'Smith',
 u'Jane',
 u'Doe']

我想得到

  {
  "First Name": "John",
  "LastName": "Smith"
  },
  {
  "First Name": "Jane",
  "Last Name": "Doe"
  }

或者类似的东西,这样我就可以在字典里查询数据了。在


Tags: 数据namedivdatacolumntrclasstd
2条回答

这应该是可行的-它没有经过测试,但应该是接近:

rawdata = []
headdata = []
for tr in table.find_elements_by_tag_name('tr'):
    tmp = {}
    for th in tr.find_elements_by_tag_name('th'):
        headdata.append(append(th.text)

    ii = 0
    for td in tr.find_elements_by_tag_name('td'):
        tmp[headdata[ii]] = td.text
        ii += 1        

    rawdata.append(tmp)

您可能可以从thead按路径获取头,从tbody获取tr行

使用你的html代码片段:

分配的一部分_标题.py

first_names  = map(lambda el: el.text, browser.find_elements_by_xpath('//tr/td[1]'))
second_names = map(lambda el: el.text, browser.find_elements_by_xpath('//tr/td[2]'))
headers      = map(lambda el: el.text, browser.find_elements_by_xpath('//th/div'))

print [{headers[0]: first_names[i], headers[1]: second_names[i]} for i in range(len(first_names))]

实际操作:

^{pr2}$

相关问题 更多 >