如何仅基于python3中的\ n在行中中断字符串?

时间:2019-03-19 20:22:57

标签: python python-3.x

我正在尝试读取一个包含很多非传统换行符的文本文件。

有两个文件,每个文件都有18846行。但是,当我在python3中读取其中一个文件并分成几行时,结果为19010行。

使用python2或LocalDateawk 'END {print NR}' file之类的unix命令都不会重复此操作。我知道python3确实会根据12个条件(在[1]中命名)拆分行。

我尝试过使用替换的策略:

wc -l

使用“ rt”甚至使用ftfy打开文件,但没有其他选择可以成功。

有人知道如何使用wc和awk所采用的相同策略读取断行的文件吗? 甚至可能正在更改这样的文件。

[1] https://docs.python.org/3/library/stdtypes.html#str.splitlines

1 个答案:

答案 0 :(得分:3)

使用io.open并将newline参数设置为您选择的行尾(如Unix工具中的\n):

with io.open(file_path, 'r', encoding='utf8', newline='\n') as sr:
    for line in sr:
        # do stuff

请注意,您可能还希望删除所有其他换行符或将它们替换为空格。可以使用类似正则表达式的

import re
line = re.sub('[\u000B\u000C\u000D\u0085\u2028\u2029]+', ' ', line)

其中模式与一个或多个字符匹配的地方

  • \u000B-VT,垂直制表符
  • \u000C-FF,换页
  • \u000D-CR,回车符
  • \u0085-NEL,下一行(非常频繁)
  • \u2028-LSEP,行分隔符
  • \u2029-PSEP,段落分隔符