如何按空格和行结束符分割文件内容?

3 投票
6 回答
39191 浏览
提问于 2025-04-15 15:57

当我使用下面这种列表推导式时,结果变成了嵌套列表:

channel_values = [x for x in [ y.split(' ') for y in
    open(channel_output_file).readlines() ] if x and not x == '\n']

基本上,我有一个文件,内容是这样的:

7656 7653 7649 7646 7643 7640 7637 7634 7631 7627 7624 7621 7618 7615
8626 8623 8620 8617 8614 8610 8607 8604 8600 8597 8594 8597 8594 4444
<snip several thousand lines>

这个文件的每一行都是以换行符结束的。

我其实是想把每个数字(它们之间用一个空格分开)放进一个列表里。

有没有更好的方法可以通过列表推导式来做到这一点呢?

6 个回答

2

另外,原来的列表推导式中有嵌套列表的原因是因为你在里面加了一层额外的列表推导式,用了内层的方括号。你其实是想这样做:

channel_values = [x for x in y.split(' ') for y in
    open(channel_output_file) if x and not x == '\n']

其他的回答虽然写代码的方式更好,但这就是问题的根源。

8

只需要这样做:

channel_values = open(channel_output_file).read().split()

split() 方法会根据空格来分割字符串,包括 ' ' '\t' 和 '\n'。这样会把所有的值分割成一个列表。

如果你想要整数值,可以这样做:

channel_values = map(int, open(channel_output_file).read().split())

或者使用列表推导式:

channel_values = [int(x) for x in open(channel_output_file).read().split()]
19

你不需要用列表推导式来做这个:

channel_values = open(channel_output_file).read().split()

撰写回答