背景:我的任务是从一个网站(主要是HTML表格)中获取内容,然后将其插入到wiki类型的网站中。我能够使用REST API轮询内容(它是动态的)并获得HTML格式的输出。我必须接受此输出,并将其转换为Wiki Markup,然后将其插入新站点。我在转换部分遇到问题。
目前我在我的测试脚本中使用html2text模块,如下所示:
import os
import sys
import html2text
file = raw_input("File to convert: ")
h = html2text.HTML2Text()
with open(file, 'r') as f:
dataContent = f.read()
dataConverted = h.handle(dataContent)
with open('tempconvert', 'w') as f:
f.write(dataConverted)
#print dataConverted
# Add the | to the line beginnings and endings
with open('tempconvert', 'r') as f:
tempContent = f.readlines()
with open('finalconvert', 'w') as f:
for line in tempContent:
if '|' in line:
f.write('|' + line.rstrip('\n') + '| \n')
现在,所有这些输入和输出的原因是因为html2text模块没有插入开头或尾随" |" wiki语法需要将其识别为表格。
我的问题是:
答案 0 :(得分:1)
1:您可以使用split
从单个字符串转换为字符串列表来消除临时文件。这样做会产生从每一行中删除\n
的副作用,您必须将其添加回去或稍后进行说明。
tempContent = dataConverted.split('\n')
2:有两种方法可以解决这个问题。首先是简单地使用else
来编写之前跳过的行。 (如果您使用上面的rstrip
提示,则无需split
。
if '|' in line:
f.write('|' + line + '| \n')
else:
f.write(line + '\n')
另一种方法是在需要更新时更新该行,然后在任何一种情况下写入。
if '|' in line:
line = '|' + line + '| '
f.write(line + '\n')
3:这更难,因为您不只是想将这些条添加到空白行后面的任何行,您想要检测到有一个表格即将出现。这意味着你需要某种前瞻性。这是一个可以用来自动向前看的小功能。
def lookahead(seq):
current = None
for upcoming in seq:
if current is not None:
yield current, upcoming
current = upcoming
if current is not None:
yield current, None
你会这样使用它:
for line, upcoming in lookahead(tempContent):
if (upcoming and '|' in upcoming) or ('|' in line):
line = '|' + line + '|'
答案 1 :(得分:0)
第一次尝试:
html = html2text.HTML2Text()
input_file = raw_input('File to convert: ')
with open(input_file, 'r') as input_, open('finalconvert', 'w') as output_:
data = input_.read()
data_converted = html.handle(data)
for line in data_converted.split('\n'):
if '|' in line:
line = "|{}|\n".format(line.rstrip())
output_.write(line.encode())
此代码修复了1和2;但我不明白3。