簡體   English   中英

如何從Python 2.7中的tell()計數中排除\\ n和\\ r \\ n

[英]How to exclude \n and \r from tell() count in Python 2.7

我想在它上面使用readline()后,在一個簡單的文本文件(只有幾行)上跟蹤文件指針。 我觀察到tell()函數也計算行結尾。

我的問題:

  1. 如何指示代碼跳過計算行結尾?

  2. 如何處理第一個問題,無論行結束類型如何(如果文本文件僅使用\\n ,或僅使用\\r ,或兩者都使用)?

你正陷入困境。 不要這樣做:要么使用“告訴”告訴你的數字,要么計算你在內存中的內容,無論文件內容如何。

您將無法將文本中的位置,內存中的位置與文本文件中的物理位置相關聯:文本文件不適用於此。 它們應該一次讀取一行,或者整體讀取:您的pogram消耗文本,讓操作系統擔心文件位置。

您可以以二進制模式打開文件,將其內容讀入內存,並根據需要從這些內容中檢索可讀文本的方法 - 使用適當的class進行此操作可以使其不那么混亂。

考慮你已經存在的行結尾問題,可能是“\\ n”或“\\ r \\ n”並仍然算作單個字符,現在,想象一下如果文件有一個復雜的情況那么復雜一百倍單個utf-8編碼字符,需要多個字節進行編碼。

即使在二進制文件中,知道絕對文件指針位置只能在極少數情況下使用,通常情況下,使用數據庫引擎開始時會更好。

telltell 它計算從文件開頭到光標的字節數。 \\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)

http://regex101.com/r/kM6dA1

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.

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