Сортировка таблицы HTML (с тегами привязки и данными в ячейках) в Python - PullRequest
0 голосов
/ 05 апреля 2010

У меня есть необходимость отсортировать заданную таблицу HTML следующей структуры в Python.

<table>
    <tr>
        <td><a href="#">ABCD</a></td>
        <td>A23BND</td>
        <td><a title="ABCD">345345</td>
    </tr>
    <tr>
        <td><a href="#">EFG</a></td>
        <td>Add4D</td>
        <td><a title="EFG">3432</td>
    </tr>
    <tr>
        <td><a href="#">HG</a></td>
        <td>GJJ778</td>
        <td><a title="HG">2341333</td>
    </tr>

</table>

Я делаю что-то вроде этого:

container = tree.findall("tr")
strOut = ""
data = []
for elem in container:
    key = elem.findtext(colName)
    data.append((key, elem))

data.sort()

Проблема в том, что он сортирует по тексту внутри <td>. Я хочу иметь возможность сортировки по значению привязки, а не href.

Что я могу сделать, чтобы достичь этого? Большое спасибо.

Ответы [ 3 ]

1 голос
/ 05 апреля 2010

Сортирует по тексту, потому что это то, что вы извлекаете в качестве ключа, когда делаете

key = elem.findtext(colName)

Я думаю, colName - это некоторая строка тега, а findtext просто найдет текст первого подэлемента, соответствующего этому тегу. Если вместо этого вы хотите использовать в качестве ключа значение некоторого атрибута (например, title?) Для <a>,

for ana in elem.findall('a'):
    key = ana.get('title')
    if key is not None: break

Сделал бы это. Точно что вы хотите использовать в качестве ключа?

0 голосов
/ 20 апреля 2010

Я знаю, что это был не ваш вопрос, но лучшая практика для такого рода вещей - использовать Javascript. Вы получите гораздо лучший пользовательский опыт на вашем сайте (если это то, что вы делаете).

Эта библиотека JS превосходна и проста в использовании: http://www.kryogenix.org/code/browser/sorttable/

0 голосов
/ 05 апреля 2010

Метод sort имеет значения key и cmp аргументов, которые можно использовать для пользовательской сортировки.Если вы дополняете структуру данных data дополнительной информацией, необходимой для сортировки, вы можете использовать либо key, либо cmp (в зависимости от конкретной необходимости) в вызове sort, чтобы достичь того, что вы хотите.Вот простой пример:

In [60]: ids = [1, 2, 3]
In [61]: score = {1: 20, 2: 70, 3: 40}
In [62]: ids.sort(key=lambda x: score[x])
In [63]: ids
Out[63]: [1, 3, 2]

Здесь я отсортировал список ids в соответствии с оценкой каждого id, взятого из словаря score.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...