Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有自定义分隔符的Python readline_Python_Readline_End Of Line - Fatal编程技术网

带有自定义分隔符的Python readline

带有自定义分隔符的Python readline,python,readline,end-of-line,Python,Readline,End Of Line,我是新手。 我试图读取文件中的行,但是在中有一行。TXT < /COD>文件在中间某处有一个 \n>代码>试图读取该行。RealPothPython在中间剪切它,并输出为两行。 当我将该行复制并通过此窗口时,它显示为两行。所以我把文件上传到这里: 还添加了该文件的屏幕截图,如txt文件所示 这是Whatsup导出的群聊历史记录。如果您想知道的话 请帮我完整地读一行,如txt文件所示 您可以通过正则表达式读取全部内容和拆分行,而不用readline函数: import re with op

我是新手。 我试图读取文件中的行,但是在<代码>中有一行。TXT < /COD>文件在中间某处有一个<代码> \n>代码>试图读取该行。RealPothPython在中间剪切它,并输出为两行。

  • 当我将该行复制并通过此窗口时,它显示为两行。所以我把文件上传到这里:

  • 还添加了该文件的屏幕截图,如txt文件所示

  • 这是Whatsup导出的群聊历史记录。如果您想知道的话
  • 请帮我完整地读一行,如txt文件所示


您可以通过正则表达式读取全部内容和拆分行,而不用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函数()连接每个部分。

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

从流读取输入时,如果换行符为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)

在中间,一行怎么有<代码> \n>代码>?代码>\n是分隔每一行和下一行的东西。@khelwood不在Windows上。它是特定于操作系统的。Python将
\n
识别为一个万年的行标记。但是Windows使用的是
\r\n
,因此仅使用
\n
不会在记事本中分割行。也许可以帮你。我想这是因为句子中有一个“下一行字符”。也许,聊天中的人在新行中输入了文本“Kocaeli 24…”。但在我的系统中,默认情况下,文件在记事本++上显示在另一行。因此,也许这是notepad的问题。Python具有“通用换行符支持”。基本上,所有的
\n
\r
\n\r
都被视为换行符。如果以文本模式打开文件,python会将这3行结尾转换为
\n
。如果必须以不同的方式解释文本,则需要以二进制模式打开文件并手动处理行。它可以是无、、、、、、\n、、\r和\r\n中的一个。我尝试为我拥有的一个xml文件提供“/>\n”,但它给了我一个ValueError:非法换行符值。该文件太大,无法通过执行完全读取来装入内存,因此我无法执行此操作并拆分。在我拥有的数百万行中,有一行肯定有一个错误的“\n”而不是正确的“\\n”,因为数据有一个自由文本字段,该字段用双引号转义。最坏的情况是,当我使用正则表达式时,一个可怜的邻居被破坏了,如果破坏了,就删除该行。“我关心的是那条可怜的邻线。”戴夫什:这是另一个问题。我会读取带有标准换行符值(
None
)的行,如果最后一个字符不是
“\>”
,则对其进行合并。但无论如何,使用regexeforxml通常是一个糟糕的解决方案。顺便说一句,xml.sax可以用来处理xml文件,而无需在内存中加载所有内容……啊,这是一个非常好的习惯用法,它可以用于在单个文件中存储多个JSON以进行流式解析!宇宙是虐待狂。应该注意的是,
换行符
的唯一参数是
'
'\n'
'\r'
'\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)