繁体   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