通过空格分割字符串并去除换行符。

12

我有一个看起来像这样的字符串:

d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00 
ff ff 00 00 01 00 00 00  00 00 00 00 00 00 00 00 
36 00 00 00 36 00 00 00  00 1c 23 10 f8 f1 00 1b 
17 01 10 20 08 00 45 00  00 28 df 27 40 00 80 06 
2b 87 c7 08 1a 0a 0a 05  05 0a 5c ea 5c ea c2 1f 

我跳过了很多行,我想把每个数字放在一个列表中。当我使用 .split 时,它不仅返回数字列表,还包括空格和 \n,因为矩阵中间有两个空格,并且每行末尾都有换行符。所以我得到了:

['d4', 'c3', 'b2', 'a1', '02', '00', '04', '00', '', '00', …, '\nff', 'ff', '00'…]

我该如何只获取列表中的数字,而不是其他内容?

3个回答

43
如果你使用.split(" "),那么你的程序将在每个空格处进行分割,而不是在任何其他空白字符处进行分割。如果你改用.split(),程序将考虑多个空格、换行符、制表符和所有其他形式的空白字符。这应该可以让你得到你想要的结果。
>>> teststr = "a   v w   ef sdv   \n   wef"
>>> print(teststr)
a   v w   ef sdv   
   wef
>>> teststr.split()
['a', 'v', 'w', 'ef', 'sdv', 'wef']
>>> teststr.split(" ")
['a', '', '', 'v', 'w', '', '', 'ef', 'sdv', '', '', '\n', '', '', 'wef']

5

使用不带任何参数的split()函数将在任何空格处拆分内容,并将几个空格组合在一起。

下面是一个例子:

s = """d4 c3 b2 a1 02 00 04 00  00 00 00 00 00 00 00 00 
ff ff 00 00 01 00 00 00  00 00 00 00 00 00 00 00 
36 00 00 00 36 00 00 00  00 1c 23 10 f8 f1 00 1b 
17 01 10 20 08 00 45 00  00 28 df 27 40 00 80 06 
2b 87 c7 08 1a 0a 0a 05  05 0a 5c ea 5c ea c2 1f"""

data = s.split()

在此情况下,data 的样子会像这样:
['d4', 'c3', 'b2', 'a1', '02', '00', '04', '00', '00', '00', '00', '00', '00', '00', '00', '00', 'ff', 'ff', '00', '00', '01', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '36', '00', '00', '00', '36', '00', '00', '00', '00', '1c', '23', '10', 'f8', 'f1', '00', '1b', '17', '01', '10', '20', '08', '00', '45', '00', '00', '28', 'df', '27', '40', '00', '80', '06', '2b', '87', 'c7', '08', '1a', '0a', '0a', '05', '05', '0a', '5c', 'ea', '5c', 'ea', 'c2', '1f']

-1

Python字符串文档列出了您可以对字符串执行的许多操作。

奇怪的是,正如TheSoundDefense上面提到的那样,.split()方法在消除所有空格时并不总是有效。

要去掉换行符,请尝试使用.replace(<target>,<replacement>)方法,例如:

a = '11 11 11 11  11 11 11 11 \n22 22 22 22  22 22 22 22 \n'
b = a.replace('\n',' ')
c = b.split()
print c
>>> ['11', '11', '11', '11', '11', '11', '11', '11', '22', '22', '22', '22', '22', '22', '22', '22']

1
这种情况下,例如“00\nff”,这将失败。 - TheSoundDefense
1
修复了。我只提供.replace选项,因为OP指定.split()对他不起作用。 - mlinsenbard
1
如果OP真的在使用split(),那么这个replace根本没有任何作用;如果像TheSoundDefense怀疑的那样,OP正在使用split(" "),那么这只能解决\n的问题,而不能解决双空格或其他任何情况。我想不出任何场景下这会真正解决问题。 - abarnert
我在我的帖子中提到了这一点。我想帮忙,但是没有足够的声望来发表评论,所以我发了帖子。至少我引用了文档,如果有什么的话。 - mlinsenbard

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