如何在不使用.readlines()的情况下读取.txt文件/如何用\ n替换UTF-8换行符?

时间:2019-05-22 23:58:35

标签: python web.py

我在.txt文件中有一些AI生成的废话,如下所示:

MENENIUS:
I have been they prayers of the reason,
And away to friends than the state pointer;
The words that shall can virtue to your head.

我有一些Python代码(使用web.py),如下所示:

class index(object):
    def GET(self):
        text = open("menenius.txt", "r").read() 
        return render.index(text)

当我在localhost中查看它时,它看起来像这样:

MENENIUS: I have been they prayers of the reason, And away to friends than the state pointer; The words that shall can virtue to your head.

Menenius的讲话实际上只是一个更大的.txt文件的一个剪辑,所以我不想使用.readlines(),因为遍历该列表将占用大量内存。如果这不是问题,则可以在普通脚本中仅打印.readlines()生成的列表,但事实是我使用的是web.py,需要将其放入{{1 }}使事情复杂化。

我尝试过的东西

我的第一个想法是在生成menenius.txt的脚本中使用render.index()方法,用.replace()替换不可见的UTF-8换行符的每个实例。由于\n将整个.txt文件作为单个字符串提供给您,因此我认为这样做可以解决问题,

.read()

让我看到这个错误,指的是from_text = open("menenius.txt", "r").read() from_text.replace(0x0A, "\n") 行:

.replace()

我已经在Google上搜索过,但似乎都不太适用或非常清楚。我刚开始使用Python,并且已经绕了两个小时,所以我觉得这里确实有一个我不知道的东西。


正如我提到的,我还尝试过返回TypeError: expected a character buffer object 生成的列表,但这将占用大量内存,而且我不确定如何将输出适合.readlines()。 / p>

编辑:解决方案

因此,下面的答案有效,但是在做出更改后,我仍然遇到相同的问题。 ShadowRanger的“我假设您的渲染器正在发送HTML”让我开始思考,我打开localhost并进入Web检查器,以查看所有文本都在其render.index()标签内用引号引起来,如下所示:

p

几个小时后我又意识到了这一点。在<p> "MENENIUS: I have been they prayers of the reason, And away to friends than the state pointer; The words that shall can virtue to your head." </p> 文件中,内容被发送到该文件,如下所示:

index.html

我怀疑,再次检查web.py intro tutorial并发现了这一点:

  

正如您所看到的,模板看起来很像Python文件,除了顶部的def with语句(说明调用模板的内容)以及$ s放在任何代码的前面。当前,template.py要求$ def语句是文件的第一行。另外,请注意,web.py会自动转义此处使用的所有变量,因此,如果出于某种原因将name设置为包含HTML的值,它将被正确转义并显示为纯文本。如果要关闭此功能,请输入$:name而不是$ name。

我将<p> $content </p> 更改为$content,突然之间文本被呈现为HTML而不是字符串。

1 个答案:

答案 0 :(得分:3)

您的文件已经包含换行符('\x0a''\n'产生的相同字符的转义符)。我假设您的渲染器正在发送HTML,但是HTML不在乎文本中的换行符(pre块之外,以及其他样式类似的块)。

因此,要么将数据包装在pre块中,要么将'\n'替换为<br>标记(HTML表示“不,真的,我想换行”) ,例如:

from_text = from_text.replace("\n", "<br>\n")

留着换行符可能对查看源代码的人很方便,因此我同时替换了<br>标签和换行符(Python不会替换掉替换符,因此不必担心无限替换符而已)因为换行是替换的一部分。

相关问题