带有自定义分隔符的Python readline

时间:2018-08-23 07:49:19

标签: python readline end-of-line

这里是新手。 我正在尝试从文件中读取行,但是.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()

enter image description here

2 个答案:

答案 0 :(得分:7)

Python 3允许您定义特定文件的换行符。很少使用它,因为默认的通用换行符模式非常容忍:

  

从流中读取输入时,如果换行符为None,则启用通用换行符模式。输入中的行可以以'\ 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)

答案 1 :(得分:2)

您可以使用正则表达式读取整个内容并拆分行,而不是使用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

加入每个部分