使用Python按照换行符分割字符串

163

我需要对包含换行符的字符串进行分隔。我该如何实现?请参考下面的代码。

输入:

data = """a,b,c
d,e,f
g,h,i
j,k,l"""

期望输出:

['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

我已经尝试过以下方法:

1. output = data.split('\n')
2. output = data.split('/n')
3. output = data.rstrip().split('\n')

1
repr(data) 的输出是什么? - Ashwini Chaudhary
7个回答

289

str.splitlines 方法可以精确地实现这一点。

>>> data = """a,b,c
... d,e,f
... g,h,i
... j,k,l"""
>>> data.splitlines()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

10
str.splitlines 的一个方便之处在于,如果有结尾的 \n,它将删除它。例如,'foo\nbar\n'.split() == ['foo', 'bar', ''],而 str.splitlines('foo\nbar\n') == ['foo', 'bar'] - Matthew Moisen

15
data = """a,b,c
d,e,f
g,h,i
j,k,l"""

print(data.split())       # ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

str.split默认情况下会通过所有空格字符进行分割。如果实际字符串中有其他空格字符,则可能需要使用

str.split,默认情况下会通过所有空格字符进行分割。如果实际字符串包含其他空格字符,则建议使用

print(data.split("\n"))   # ['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

或者如@Ashwini Chaudhary在评论中建议的那样,你可以使用

print(data.splitlines())

1
为了更加安全,使用.splitlines,如果字符串中有空格等情况怎么办。 - Ashwini Chaudhary
@AshwiniChaudhary 是的,这就是为什么我建议使用 split("\n")splitlines.split("\n") 更好吗? - thefourtheye
6
它也适用于\r\n和其他类型的行分界符。 - Ashwini Chaudhary
如果你的字符串以\n结尾,splitlines()会忽略它,而split("\n")则会在结果末尾有一个额外的空字符串"" - Moberg

15

如果您只想按换行符进行分割,可以使用 str.splitlines()

示例:

>>> data = """a,b,c
... d,e,f
... g,h,i
... j,k,l"""
>>> data
'a,b,c\nd,e,f\ng,h,i\nj,k,l'
>>> data.splitlines()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

使用str.split(),您的情况也可以正常工作:

>>> data = """a,b,c
... d,e,f
... g,h,i
... j,k,l"""
>>> data
'a,b,c\nd,e,f\ng,h,i\nj,k,l'
>>> data.split()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

然而,如果您使用了空格(或制表符),它将会失败:

>>> data = """
... a, eqw, qwe
... v, ewr, err
... """
>>> data
'\na, eqw, qwe\nv, ewr, err\n'
>>> data.split()
['a,', 'eqw,', 'qwe', 'v,', 'ewr,', 'err']

2
你不需要像 data.split('\n') 一样传递要分割的字符,这似乎有点奇怪? - user1604294

7
有一个专门用于此目的的方法:
data.splitlines()
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

4

请看下面:

>>> data = """a,b,c
d,e,f
g,h,i
j,k,l"""
>>> data.split()  # split automatically splits through \n and space
['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']
>>> 

0
我们也可以使用正则表达式的split方法。
import re

data = """a,b,c
d,e,f
g,h,i
j,k,l"""

output = re.split("\n", data)

print(output) #['a,b,c', 'd,e,f', 'g,h,i', 'j,k,l']

希望这能帮助到某个人。


0

由于split函数使用字符串作为分隔符,因此您需要添加额外的反斜杠 output = data.split('\\n')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接