У меня была проблема неделю назад или около того. Так как я думаю, что решение было классным, я делюсь им здесь, ожидая ответа на вопрос, который я разместил ранее. Мне нужно знать относительную позицию заголовков столбцов в таблице, чтобы я знал, как сопоставить заголовок столбца с данными в строках ниже. Я обнаружил, что некоторые из моих таблиц имеют следующую строку в качестве первой строки в таблице
<!-- Table Width Row -->
<TR style="font-size: 1pt" valign="bottom">
<TD width="60%"> </TD> <!-- colindex=01 type=maindata -->
<TD width="1%"> </TD> <!-- colindex=02 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=02 type=lead -->
<TD width="9%" align="right"> </TD> <!-- colindex=02 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=02 type=hang1 -->
<TD width="3%"> </TD> <!-- colindex=03 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=03 type=lead -->
<TD width="4%" align="right"> </TD> <!-- colindex=03 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=03 type=hang1 -->
<TD width="3%"> </TD> <!-- colindex=04 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=04 type=lead -->
<TD width="4%" align="right"> </TD> <!-- colindex=04 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=04 type=hang1 -->
<TD width="3%"> </TD> <!-- colindex=05 type=gutter -->
<TD width="1%" align="right"> </TD> <!-- colindex=05 type=lead -->
<TD width="5%" align="right"> </TD> <!-- colindex=05 type=body -->
<TD width="1%" align="left"> </TD> <!-- colindex=05 type=hang1 -->
</TR>
Я подумал, ничего себе, это будет легко, потому что данные в столбце ниже type = body. Отсчитывая, я знал, что в строках данных мне нужно будет получить значения в столбцах [3, 7, 11, 15]. Поэтому я решил сделать это, используя этот код:
indexComment = souptoGetColIndex.findAll(text=re.compile("type=body"))
indexRow=indexComment[0].findParent()
indexCells=indexRow.findAll(text=re.compile("type=body"))
for each in range(len(indexCells)):
collist.append(tdlist.index(indexCells[each].previousSibling.previousSibling))
я получил collist = [0, 3, 7, 7, 15]
Оказывается, я думаю, что поскольку ячейки в 7-й и 11-й позиции выглядели совершенно одинаково, была возвращена одна и та же индексная позиция. Я пытался понять, как с этим справиться, очевидно, я должен был заставить их выглядеть иначе. Так что я сделал, чтобы они выглядели по-другому, сначала используя readlines, чтобы прочитать каждую строку файла и заменить пустые места случайным целым числом.
for each in toGetColIndex:
newlt.append(each.replace(r" ",str(random.randint(1,14567))))
друг указал, что я мог бы снизить накладные расходы, используя вместо этого
for each in toGetColIndex:
newlt.append(each.replace(r" ",str(toGetColIndex.index(each))))
Тем не менее, каждый из этих подходов дает мне список с colindex для расположения моих заголовков для каждого столбца и для использования в строках данных. Обратите внимание, что в функции замены отсутствует пробел, поскольку я полагаю, что html заставляет ее исчезнуть, реальный код использует r "&. N.b.s.p;" без периодов