2012-06-10 64 views

回答

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] 
1

使用或不使用稀土,如果你确切地知道文件的语法是一样的,你可以这样做:

>>> 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]] 

UPDATE:

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

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

其中fileNames是文件的你正在谈论

+1

我认为在这种情况下正则表达式版本更清晰:-) – thebjorn

+0

@thebjorn是的,它是。它只是另一种方法:) – SuperSaiyan

+0

我不知道我问的问题是否正确。我会更具体。我有25个.txt文件,每个文件包含354行。每条线看起来都像我发布的。 –

1

我会用正则表达式,但这里的数组是没有一个版本,比@法拓士的解决方案海事组织更清晰。

>>> 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] 
+0

也许你可以这样做多行: '[[int(x.split(':')[0])for line.split()[1:]] for line in arr] ' – SuperSaiyan

+0

非常感谢!这就是我一直在寻找的!这真的帮了我很多。 –

+0

@Thrustmaster是的,这将工作,我只是展示一个小例子,所以OP可以扩展它。 – jamylak

相关问题