2014-08-27 37 views
0

我有一个(ASCII)文件,foo.txt,它有很多东西,但我只关心第2行的三个数字(用空格分隔)。为了您的信息(我不知道它是否相关),此行前后的行数与行2不同。如何从Python文件中的特定行中获取三个整数?

我想从行中获取这三个数字2并将它们存储为三个独立的整数(无论是三个单独的变量还是一个长度为3的列表,我都不在乎)。

我正在使用linecache.getline()从文件中获取该行,但它将该行拉出为一个长字符串(而不是将行上的每个数字作为其自己的字符串),并且我不知道如何提取来自结果字符串的三个数字。

这里是我的代码:

import linecache 
linetemp = linecache.getline('foo.txt',2) 
#nr = [int(i) for i in line.split(linetemp)] 
print nr 

的注释行是我在提取linetemp的数字为整数的尝试,但由于linetemp是一个字符串(字符串,而不是一个列表)这是行不通的。

如果你可以改善我上面使用linecache.getline()或如果你有另一种方法从foo.txt第2行拉三个数字,我会很高兴任何一种方式。

回答

2

尝试

nr = [int(i) for i in linetemp.split()] 

你需要呼吁要分割字符串的split()功能。

例子:

In [1]: linetemp = ' 12  27 435' 

In [2]: nr = [int(i) for i in linetemp.split()] 

In [3]: nr 
Out[3]: [12, 27, 435] 
+0

或者只是'map(int,linetemp.split())'。 – 2014-08-27 19:35:42

+1

@kroolik在Python 3中给出了一个映射对象,但在Py2中给出了一个列表。列表理解适用于两个版本。 – MattDMo 2014-08-27 19:37:59

+0

OP正在使用'print nr',Py2正在使用中。 – 2014-08-27 19:41:41

1

我不会理会使用linecache这里 - 这是旨在用于其他目的 - 而不是使用islice过你正在阅读的文件的范围限制,那么该行转换为int S:

from itertools import islice 

with open('foo.txt') as fin: 
    line2 = next(islice(fin, 1, None), '') 
    nr = [int(word) for word in line2.split()] 

如果你不想导入,那么你可以做:

with open('foo.txt') as fin: 
    next(fin, '') # skip first line 
           # next line or blank 
    nr = [int(word) for word in next(fin, '').split()] 
相关问题