簡體   English   中英

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

[英]How to read .txt file without .readlines() / replace UTF-8 newline character with \n?

我在.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,需要將其放入render.index()使事情復雜化。

我嘗試過的

我的第一個想法是在生成menenius.txt的腳本中使用.replace()方法,用\\n替換不可見UTF-8換行符的每個實例。 由於.read()將整個.txt文件作為單個字符串提供給您,因此我認為這樣做可以,但是可以這樣做:

from_text = open("menenius.txt", "r").read()
from_text.replace(0x0A, "\n")

讓我得到這個錯誤,指的是.replace()

TypeError: expected a character buffer object

我已經用谷歌搜索過,但是似乎沒有一個非常適用或非常清楚。 我剛開始使用Python,並且已經進行了幾個小時的交流,所以我覺得這里確實有一個我不知道的東西。


正如我提到的,我還嘗試過返回.readlines()生成的列表,但這會占用大量內存,而且我不確定如何將輸出適合render.index()

編輯:解決方案

因此,下面的答案有效,但是在做出更改后,我仍然遇到相同的問題。 ShadowRanger的“我假設您的渲染器正在發送HTML”讓我開始思考,然后打開localhost並進入Web檢查器,以查看所有文本都在其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文件中,它看起來像這樣:

<p>
$content
</p>

我懷疑,再次檢查了web.py入門教程 ,發現了這一點:

如您所見,模板看起來很像Python文件,除了頂部的def with語句(說出模板被調用的內容)和$ s放在任何代碼的前面。 當前,template.py要求$ def語句是文件的第一行。 另外,請注意,web.py會自動轉義此處使用的所有變量,因此,如果出於某種原因將name設置為包含HTML的值,它將被正確轉義並顯示為純文本。 如果要關閉此功能,請寫$:name而不是$ name。

我將$content更改$content $:content ,突然文本被呈現為HTML而不是字符串。

您的文件已經包含換行符( '\\x0a''\\n'產生的相同字符的轉義符)。 我假設您的渲染器正在發送HTML,但是HTML不在乎文本中的換行符(除了pre塊,以及其他樣式類似的塊)。

因此,要么將數據包裝在pre塊中,要么將< '\\n'替換為< <br>標記(HTML表示“不,真的,我想換行”),例如:

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

留着換行符可能對查看源代碼的人很方便,因此我同時用<br>標記和換行符替換了(Python不會替換掉替換符,所以不必擔心無限替換,因為換行符是一部分更換)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM