我在 Python 中使用 BeautifulSoup 来解析一些 HTML。我正在处理的问题之一是我遇到标题行之间的 colspan 不同的情况。(标题行是需要组合以获得我的行话中的列标题的行)即一列可能跨越其上方或下方的许多列,并且需要根据跨度附加或前置单词。下面是执行此操作的例程。我使用 BeautifulSoup 拉出 colspan 并拉出每行中每个单元格的内容。longHeader 是包含最多项目的标题行的内容,spanLong 是一个列表,其中包含行中每个项目的跨度。这可行,但看起来不是很 Pythonic。
Alos-如果 diff <0,它就不会工作,我可以用我用来让它工作的相同方法来解决这个问题。但在我这样做之前,我想知道是否有人可以快速查看这个并提出一种更 Pythonic 的方法。我是一名长期的 SAS 程序员,所以我很难打破常规——我会像编写 SAS 宏一样编写代码。
longHeader=['','','bananas','','','','','','','','','','trains','','planes','','','','']
shortHeader=['','','bunches','','cars','','trucks','','freight','','cargo','','all other','','']
spanShort=[1,1,3,1,3,1,3,1,3,1,3,1,3,1,3]
spanLong=[1,1,3,1,1,1,1,1,1,1,1,1,3,1,3,1,3,1,3]
combinedHeader=[]
sumSpanLong=0
sumSpanShort=0
spanDiff=0
longHeaderCount=0
for each in range(len(shortHeader)):
sumSpanLong=sumSpanLong+spanLong[longHeaderCount]
sumSpanShort=sumSpanShort+spanShort[each]
spanDiff=sumSpanShort-sumSpanLong
if spanDiff==0:
combinedHeader.append([longHeader[longHeaderCount]+' '+shortHeader[each]])
longHeaderCount=longHeaderCount+1
continue
for i in range(0,spanDiff):
combinedHeader.append([longHeader[longHeaderCount]+' '+shortHeader[each]])
longHeaderCount=longHeaderCount+1
sumSpanLong=sumSpanLong+spanLong[longHeaderCount]
spanDiff=sumSpanShort-sumSpanLong
if spanDiff==0:
combinedHeader.append([longHeader[longHeaderCount]+' '+shortHeader[each]])
longHeaderCount=longHeaderCount+1
break
print combinedHeader