2012-08-02 5 views
1
여기

내 코드입니다 :파이썬은 txt 파일을 입력으로 읽습니다 : IndexError :리스트 인덱스가 범위를 벗어 났습니까?

if __name__ == '__main__': 
    fid = open ('200502.txt') 
    data = fid.readlines() 
    data = map (string.strip, data) 
    x = [] 
    y = [] 
    da = [] 
    for d in data: 
    s = d.split() 
    x.append(float(s[0])/10000.0) 
    y.append(float(s[1])/10000.0) 
    da.append(float(s[2])) 

내가 그것을 실행하면 내가 가지고 :

Traceback (most recent call last): 
    File "plot_data.py", line 286, in ? 
    x.append(float(s[0])/10000.0) 
IndexError: list index out of range 

200502.txt은 (840킬로바이트는) 파일과 같은 것입니다 :이 약해

1131087 224529 3.923 
1131096 224529 3.958 
1131106 224530 3.897  
1131116 224530 3.917 
1131126 224530 3.847 
(....) 

답변

3

데이터를로드하는 방법. 내 생각 엔 파일의 끝 부분에 개행 문자가있는 것 같아. 관계없이 파일을 numpy.loadtxt (또는 numpy에 액세스 할 수없는 경우 csv 모듈)로로드해야합니다.

하면 그 시작으로 활용하려면 다음 데이터가없는 사용자의 입력 파일에서 적어도 하나 개의 요소가있다

>>> import numpy 
>>> data = numpy.loadtxt('/tmp/200502.txt') 
>>> xs = data.T[0]/10000. 
>>> ys = data.T[1]/10000. 
>>> da = data.T[2] 
+0

우리가 스타일에 관한 질문에 빠지면 각 줄의 x, y 및 데이터 값을 별도의 목록으로로드하면 처음부터 다소 의문의 여지가 있습니다. 객체, 목록, 튜플 또는 딕트의 목록이 더 합리적인 것처럼 보일 것입니다. –

+0

@ sr2222 : 수정하기 쉽습니다.'x, y, da = np.loadtxt ('200502.txt', unpack = True); x * = 1e-5; y * = 1e-5' – jfs

0

. data을 반복하고 있으며 요소 중 하나가 d.split()에서 길이가 0 인 목록을 생성 중입니다. 또한 구조화 된 조직에 데이터를로드하는 것이 좋습니다. loaded_data = [zip(('x', 'y', 'da'), d.split()) for d in data]과 같은 것입니다.

관련 문제