我在.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而不是字符串。
答案 0 :(得分:3)
您的文件已经包含换行符('\x0a'
是'\n'
产生的相同字符的转义符)。我假设您的渲染器正在发送HTML,但是HTML不在乎文本中的换行符(pre
块之外,以及其他样式类似的块)。
因此,要么将数据包装在pre
块中,要么将'\n'
替换为<br>
标记(HTML表示“不,真的,我想换行”) ,例如:
from_text = from_text.replace("\n", "<br>\n")
留着换行符可能对查看源代码的人很方便,因此我同时替换了<br>
标签和换行符(Python不会替换掉替换符,因此不必担心无限替换符而已)因为换行是替换的一部分。