带有自定义分隔符的Python readline
我是新手。 我试图读取文件中的行,但是在<代码>中有一行。TXT < /COD>文件在中间某处有一个<代码> \n>代码>试图读取该行。RealPothPython在中间剪切它,并输出为两行。带有自定义分隔符的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文件所示
- 这是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)