15

新手在这里。我正在尝试从文件中读取行,但是文件中的单行在中间某处.txt有 a \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()

在此处输入图像描述

4

2 回答 2

15

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)
于 2018-08-23T08:32:41.863 回答
0

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

于 2018-08-23T08:11:35.123 回答