![](/img/trans.png)
[英]How to remove \r, \n, \t from unicode strings in Python 2.7
[英]How to exclude \n and \r from tell() count in Python 2.7
我想在它上面使用readline()
后,在一個簡單的文本文件(只有幾行)上跟蹤文件指針。 我觀察到tell()
函數也計算行結尾。
我的問題:
如何指示代碼跳過計算行結尾?
如何處理第一個問題,無論行結束類型如何(如果文本文件僅使用\\n
,或僅使用\\r
,或兩者都使用)?
你正陷入困境。 不要這樣做:要么使用“告訴”告訴你的數字,要么計算你在內存中的內容,無論文件內容如何。
您將無法將文本中的位置,內存中的位置與文本文件中的物理位置相關聯:文本文件不適用於此。 它們應該一次讀取一行,或者整體讀取:您的pogram消耗文本,讓操作系統擔心文件位置。
您可以以二進制模式打開文件,將其內容讀入內存,並根據需要從這些內容中檢索可讀文本的方法 - 使用適當的class
進行此操作可以使其不那么混亂。
考慮你已經存在的行結尾問題,可能是“\\ n”或“\\ r \\ n”並仍然算作單個字符,現在,想象一下如果文件有一個復雜的情況那么復雜一百倍單個utf-8編碼字符,需要多個字節進行編碼。
即使在二進制文件中,知道絕對文件指針位置只能在極少數情況下使用,通常情況下,使用數據庫引擎開始時會更好。
tell
是tell
。 它計算從文件開頭到光標的字節數。 \\n
和\\r
是字節,因此它們被計算在內。 如果要計算字節數,但不計算某些字符,則必須手動執行:
data_read = … # data you have already read
len([b for b in data_read if b not in '\r\n'])
壞消息是這樣做比討論tell
要煩人得多。 好消息是它可以回答你的問題。
或者,我想你可以做到
yourfile.tell() - data_read.count('\r') - data_read.count('\n')
result = re.sub("[\r\n]", "", subject)
Match a single character present in the list below «[\r\n]»
A carriage return character «\r»
A line feed character «\n»
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.