2

我正在读取一行文本数据,我想将该行拆分为一个值列表。例如该行有四个数字,每个数字分配 5 个空格,因此如果数字是 18、295、-9999 和 1780,那么原始行将如下所示(^ 字符表示行的开始和结束,不包括在内在实际输入数据中):

^   18  295-9999 1780^

我想将该行拆分为其实际组件值的列表:

[18, 295, -9999, 1780]

我知道列表应该包含的值的数量(在上面的示例中为 4),并且我确切地知道每个值在字符串中占用的空格数(在上面的示例中为 5)。我可以创建一个循环来进行这种拆分,如下所示:

values = []
for i in range(4):
    values.append(line[i*5:5])

有没有更有效或更“Pythonic”的方式来做到这一点?

在此先感谢您的帮助。

4

2 回答 2

8

使用切片...

>>> [int(s[i:i+5]) for i in xrange(0, len(s), 5)]
[18, 295, -9999, 1780]

或者 - 如果你真的想要,有些人会发现re更具可读性......(只是把它作为参考的替代品 - 不要开枪!)

>>> map(int, re.findall('.{5}', s))
[18, 295, -9999, 1780]
于 2012-11-01T17:17:14.087 回答
1

这是另一种可能的解决方案:

x = '   18  295-9999 1780'

def split_up(x):
    return map(int, x.replace('-', ' -').split())

结果

>>> split_up(x)
[18, 295, -9999, 1780]
于 2012-11-01T17:55:55.413 回答