当前位置: 首页 > 面试题库 >

将选项卡式文本转换为html无序列表?

缪英锐
2023-03-14
问题内容

我是一个初学者,所以这个问题听起来很简单:我有一些包含制表符分隔文本的文本文件,例如:

A
    B
    C
        D
        E

现在,我想使用此结构生成无序的.html列表:

<ul>
<li>A
<ul><li>B</li>
<li>C
<ul><li>D</li>
<li>E</li></ul></li></ul></li>
</ul>

我的想法是编写Python脚本,但是如果有更简单的(自动)方式,那也很好。为了识别缩进级别和项目名称,我将尝试使用以下代码:

import sys
indent = 0
last = []
for line in sys.stdin:
    count = 0
    while line.startswith("\t"):
       count += 1
       line = line[1:]
    if count > indent:
       indent += 1
       last.append(last[-1])
    elif count < indent:
       indent -= 1
       last = last[:-1]

问题答案:

tokenize模块了解您的输入格式:行包含有效的Python标识符,语句的缩进级别很重要。ElementTree模块允许您操纵内存中的树结构,因此可以更灵活地将树创建与将其渲染为html分开:

from tokenize import NAME, INDENT, DEDENT, ENDMARKER, NEWLINE, generate_tokens
from xml.etree import ElementTree as etree

def parse(file, TreeBuilder=etree.TreeBuilder):
    tb = TreeBuilder()
    tb.start('ul', {})
    for type_, text, start, end, line in generate_tokens(file.readline):
        if type_ == NAME: # convert name to <li> item
            tb.start('li', {})
            tb.data(text)
            tb.end('li')
        elif type_ == NEWLINE:
            continue
        elif type_ == INDENT: # start <ul>
            tb.start('ul', {})
        elif type_ == DEDENT: # end </ul>
            tb.end('ul')
        elif type_ == ENDMARKER: # done
            tb.end('ul') # end parent list
            break
        else: # unexpected token
            assert 0, (type_, text, start, end, line)
    return tb.close() # return root element

提供任何类.start().end().data().close()方法可以用作TreeBuilder例如,你可以只写HTML上飞的,而不是建立一个树。

要解析标准输入并将html写入标准输出,可以使用ElementTree.write()

import sys

etree.ElementTree(parse(sys.stdin)).write(sys.stdout, method='html')

输出:

<ul><li>A</li><ul><li>B</li><li>C</li><ul><li>D</li><li>E</li></ul></ul></ul>

您可以使用任何文件,而不仅仅是sys.stdin/sys.stdout

注意:要在Python 3上写入stdout,请使用sys.stdout.bufferencoding="unicode"由于字节/
Unicode的不同而不同。



 类似资料:
  • 当我像下面的例子一样点击选项卡2时,我如何将选项卡1 Neumorphic css翻译成选项卡2呢,就像从选项卡1滑到选项卡2一样? https://dribble.com/shots/10805627-neumorphic-tab

  • 我双击以在选项卡中打开文件,因此它处于正常模式。我使用cmd单击或F12在一个单词上查看定义,但定义选项卡在预览模式下打开。当我想在这个新选项卡中查看另一个定义时,它会覆盖这个新选项卡。当预览模式选项卡已经在预览模式下打开时,有什么解决方案可以将其转换为正常模式吗?

  • 问题内容: 我有Java程序,它将从服务器接收纯文本。纯文本可能包含URL。Java库中是否有任何Class可以将纯文本转换为HTML文本?还是其他图书馆?如果没有,那该怎么办呢? 问题答案: 我找到了使用模式匹配的解决方案。这是我的代码- 这是输入和输出- 输入文字是可变的: 输出:

  • 我是数据分析新手。我正在尝试一些模型在Python SkLearning。我有一个数据集,其中一些列有文本列。像下面, 数据集 是否有办法将这些列值转换为pandas或Sklearn中的数字?。将数字分配给这些值是正确的?。如果测试数据中出现新字符串呢?。 请给我一些建议。

  • 问题内容: 我在表格中存储了HTML片段。 不是整个页面,没有标签等,只是基本格式。 我希望能够在给定页面上将Html仅显示为文本,而 无需设置格式 (实际上只是前30-50个字符,但这很容易)。 如何将Html中的“文本”作为纯文本放入字符串中? 所以这段代码。 成为: 你好,世界。有没有人在那里? 问题答案: 如果您在谈论标签剥离,那么无需担心标签之类的事情就相对简单了。如果您需要做的就是显示

  • 问题内容: 我正在开发一个简单的RSS Reader应用程序,作为Xcode中的初学者项目。目前,我已设置它解析提要,并放置标题,发布日期,描述和内容,并将其显示在WebView中。 我最近决定在用于选择帖子的TableView中显示说明(或内容的删节版本)。但是,这样做时: 它显示了帖子的原始HTML。 我想知道如何仅将TableView的详细UILabel转换为纯文本的HTML。 谢谢! 问题

  • 问题内容: 按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我需要从现有的(X)HTML文档自动生成PDF文件。输入文件(报告)使用非常简单的基于表的布局,因此可能不需要支持真正精美的JavaScript / CSS。

  • 问题内容: 我正在寻找C#代码以将HTML文档转换为纯文本。 我不是在寻找简单的标记剥离方法,而是会输出纯文本并 合理 保留原始布局的东西。 输出应如下所示: W3C的Html2Txt 我看过HTML Agility Pack,但我认为这不是我所需要的。有人还有其他建议吗? 编辑: 我只是从CodePlex下载HTML Agility Pack ,并运行了Html2Txt项目。真令人失望(至少是将