如何在换行符上分割Python字符串

85 投票
2 回答
274057 浏览
提问于 2025-04-18 09:54

在Windows 7的Python 3中,我把一个网页的内容读入了一个字符串。

接下来,我想把这个字符串按照换行符分割成一个列表。

但是我不能直接在我的代码里把换行符作为split()的参数,因为这样会出现语法错误。

错误信息是:'EOL while scanning string literal',意思是“在扫描字符串时遇到了行尾”

如果我输入字符\n,就会出现Unicode错误。

有没有什么办法可以解决这个问题呢?

2 个回答

3

a.txt

this is line 1
this is line 2

代码:

Python 3.4.0 (default, Mar 20 2014, 22:43:40) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> file = open('a.txt').read()
>>> file
>>> file.split('\n')
['this is line 1', 'this is line 2', '']

我在用Linux,不过我想你在Windows上用\r\n也能正常工作。

200

✨ 在Python中分割行:

你试过用 str.splitlines() 方法吗?

根据文档:

str.splitlines([keepends])

这个方法会返回字符串中的每一行,按照行的边界进行分割。行的换行符不会包含在结果列表中,除非你给 keepends 参数并且设置为真。

举个例子:

>>> 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines()
['Line 1', '', 'Line 3', 'Line 4']

>>> 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines(True)
['Line 1\n', '\n', 'Line 3\r', 'Line 4\r\n']

哪些分隔符被考虑?

这个方法使用了通用换行符的方法来分割行。

Python 2.X 和 Python 3.X 的主要区别在于,前者使用通用换行符的方法来分割行,所以 "\r""\n""\r\n" 被认为是8位字符串的行边界,而后者使用了一个更广泛的方式,还包括:

  • \v\x0b:行制表符(在Python 3.2中添加)。
  • \f\x0c:换页符(在Python 3.2中添加)。
  • \x1c:文件分隔符。
  • \x1d:组分隔符。
  • \x1e:记录分隔符。
  • \x85:下一行(C1控制码)。
  • \u2028:行分隔符。
  • \u2029:段落分隔符。

splitlines 和 split 的区别:

str.split() 方法不同,当给定一个分隔符字符串 sep 时,这个方法对于空字符串会返回一个空列表,并且末尾的换行符不会导致多出一行:

>>> ''.splitlines()
[]

>>> 'Line 1\n'.splitlines()
['Line 1']

str.split('\n') 返回:

>>> ''.split('\n')
['']

>>> 'Line 1\n'.split('\n')
['Line 1', '']

✂️ 去除多余的空格:

如果你还需要去掉开头或结尾的多余空格,比如被 str.splitlines() 忽略的空格,你可以把 str.splitlines()str.strip() 一起使用:

>>> [str.strip() for str in 'Line 1  \n  \nLine 3 \rLine 4 \r\n'.splitlines()]
['Line 1', '', 'Line 3', 'Line 4']

️ 去除空字符串 (''):

最后,如果你想从结果列表中过滤掉空字符串,可以使用 filter()

>>> # Python 2.X:
>>> filter(bool, 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines())
['Line 1', 'Line 3', 'Line 4']

>>> # Python 3.X:
>>> list(filter(bool, 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines()))
['Line 1', 'Line 3', 'Line 4']

关于原问题的额外说明:

根据你发布的错误信息和Burhan的建议,问题出在打印上。有一个相关的问题可能对你有帮助: UnicodeEncodeError: 'charmap' codec can't encode - character maps to <undefined>, print function

撰写回答