2014-08-27 2 views
0

나는 많은 것들이 들어있는 (ASCII) 파일 인 foo.txt을 가지고 있지만, 공백으로 구분 된 두 줄의 세 숫자에 대해서만 신경을 쓰고 있습니다. 귀하의 정보 (관련성이 있는지 여부는 알 수 없음)이 줄 앞뒤의 줄 수는 2 줄과 동일하지 않습니다.파이썬에서 파일의 특정 줄에서 3 개의 정수를 얻는 방법은 무엇입니까?

줄에서이 세 숫자를 가져오고 싶습니다. 2를 3 개의 분리 된 정수 또는 3 개의 별도 변수로 저장하거나 상관하지 않는 길이 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 번 줄에서 3 가지 숫자를 가져 오는 다른 방법이있는 경우 어느 쪽이든 기쁘게 생각합니다.

답변

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())'. –

+1

@kroolik 이것은 Python 3에서는 맵 객체를 제공하지만 Py 2에서는리스트를 제공합니다. 목록 이해는 두 버전 모두에서 작동합니다. – MattDMo

+0

OP는'print nr'을 사용하여 Py2가 사용 중일 가능성이 큽니다. –

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()] 
관련 문제