簡體   English   中英

帶有自定義分隔符的Python readline

[英]Python readline with custom delimiter

新手在這里。 我正在嘗試從文件中讀取行,但是.txt文件中的單行在某處有一個\\n ,並且在嘗試使用.readline讀取該行時,python將其切換為中間並輸出為兩行。

  • 當我復制並通過該行到這個窗口時,它顯示為兩行。 所以我在這里上傳了這個文件: https//ufile.io/npt3n

  • 還添加了文件的截圖,如txt文件中所示。

  • 這是從Whatsup出口的群聊歷史。如果你想知道的話。
  • 請幫我完整閱讀一行,如txt文件所示。

f= open("f.txt",mode='r',encoding='utf8')

for i in range(4):
    lineText=f.readline()
    print(lineText)

f.close()

在此輸入圖像描述

Python 3允許您定義特定文件的換行符。 它很少使用,因為默認的通用換行模式非常寬容:

從流中讀取輸入時,如果換行為“無”,則啟用通用換行模式。 輸入中的行可以以'\\ n','\\ r'或'\\ r \\ n'結尾,並且在返回給調用者之前將這些行轉換為'\\ n'。

所以在這里你應該明確指出只有'\\ r \\ n'是行尾:

f= open("f.txt",mode='r',encoding='utf8', newline='\r\n')

# use enumerate to show that second line is read as a whole
for i, line in enumerate(fd):   
    print(i, line)

您可以通過正則表達式讀取整個內容和拆分行,而不是使用readline函數:

import re

with open("txt", "r") as f:
    content = f.read()
    # remove end line characters
    content = content.replace("\n", "")
    # split by lines
    lines = re.compile("(\[[0-9//, :\]]+)").split(content)
    # clean "" elements
    lines = [x for x in lines if x != ""]
# join by pairs
lines = [i + j for i, j in zip(lines[::2], lines[1::2])]

如果所有內容都有相同的開頭[...],您可以按此分割,然后清除省略“”元素的所有部分。 然后你可以用zip功能加入每個部分( https://stackoverflow.com/a/5851033/1038301

暫無
暫無

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

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