[英]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.