2014-08-27 36 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()] 
相關問題