0

我有多个 .txt 文件,其中包含与此类似的多行:

[class1] 1:-28 9:-315 13:-354227 2:-36.247 17:-342 8:-34 14:-3825
[class2] 14:-31.8679 7:-32.3582 2:-32.4127 1:-32.7257 8:-32.9804 16:-33.2156

我想知道如何读取:s 之前的数字并将它们存储在一个数组中。

4

3 回答 3

2
>>> import re
>>> text = "[class1] 1:-28 9:-315 13:-354227 2:-36.247 17:-342 8:-34 14:-3825"
>>> map(int, re.findall(r'(\S+):\S+', text)) # You could also do map(float,...)
[1, 9, 13, 2, 17, 8, 14]
于 2012-06-10T13:13:15.687 回答
1

或者不使用 RE,如果你确定文件的语法保持不变,你可以使用这个:

>>> arr
['[class1] 1:-28 9:-315 13:-354227 2:-36.247 17:-342 8:-34 14:-3825', '[class2] 14:-31.8679 7:-32.3582 2:-32.4127 1:-32.7257 8:-32.9804 16:-33.2156']
>>> newArr = [map(lambda y: int(y[:y.index(":")]),x.split(" ")[1:]) for x in arr]
>>> newArr
[[1, 9, 13, 2, 17, 8, 14], [14, 7, 2, 1, 8, 16]]

更新:

如果您有多个文件,可能会做这样的事情(基于@jamylak 的我的解决方案的更清晰版本):

[[[int(x.split(':')[0]) for x in line.split()[1:]] for line in open(fileName)] for fileName in fileNames]

fileNames您正在谈论的文件数组在哪里

于 2012-06-10T13:19:19.637 回答
1

我会使用正则表达式,但这是一个没有的版本,比 @Thrustmaster 的解决方案 imo 更清晰。

>>> text = "[class1] 1:-28 9:-315 13:-354227 2:-36.247 17:-342 8:-34 14:-3825"
>>> [int(x.split(':')[0]) for x in text.split()[1:]]
[1, 9, 13, 2, 17, 8, 14]
于 2012-06-10T13:31:24.197 回答