2016-11-20 10 views
0

내 프로그램에 다음 데이터를 읽으려고합니다.ValueError 예상 됨 2 1 파이썬이 있습니다

Distance (m) Mass (kg) 
0.0865 0.1 
0.1015 0.15 
0.4416 0.9 
0.4304 0.95 
0.437 1.0 

다음 코드를 사용 중입니다. 책에서 바로 나와 있습니다.

def getData(fileName): 
    dataFile = open(fileName, 'r') 
    distances = [] 
    masses = [] 
    discardHeader = dataFile.readline() 
    for line in dataFile: 
     d, m = line.split(' ') 
     distances.append(float(d)) 
     masses.append(float(m)) 
    dataFile.close() 
    return (masses, distances) 

코드는 지속적으로 반환

ValueError: not enough values to unpack (expected 2, got 1) 

나는 아직 프로그램에 공백으로 구분 된 데이터를 읽어와 관련,하지만이 다른 ValueError를 항목, 여기 웹, 검토 한 실질적으로 비슷한 문제가있는 것을 찾아라.

문제는 줄 d, m = line.split(' ')이라고 추측합니다. 나는 이것이 무엇이라고 불리는 지 알 수 없다 (복합 할당? 튜플 할당?), 왜 작동하지 않는가? (나는 이전에 이런 식으로 시도한 적이 없지만 합리적으로 보인다), 또는 어떻게 작동시키는지를 잘 모른다. 이런 방식으로 파일을 읽는 사람들이 상황에 대해 밝힐 수 있다면 크게 환영 할 것입니다.

+3

파일의 한 줄에 공백이 없습니다. – TigerhawkT3

+2

루프 시작 부분에'print (line)'을 추가하여 실패한 행을 확인하십시오. –

+1

"마지막"줄이 줄 바꿈으로 끝나는 것 같습니다. – TigerhawkT3

답변

2

포장을 풀고이라고합니다. 반복 가능한 (목록, 튜플 또는 색인 생성을 지원하는 모든 것) 경우 x, y = point과 같은 구문은 point[0], point[1] 요소를 가져와 x, y에 각각 할당합니다. 더 point[0] 또는 point[1]이없는 경우, 귀하의 경우에 일어나는 것이다 예외

가 발생합니다, 파일의 일부 라인은 두 값 사이에 공백, 그래서 line.split(' ') 반환 한 가지

누락 된 대부분의 아마 때문에
+0

구문의 유형과 그 기능에 대해 질문 해 주셔서 감사합니다! 저자는 그것이 자명 한 것으로 가정합니다. – Ryan

1

파일의 끝에 new line이라는 빈칸이 나올 확률이 높습니다.이 경우 파일을 분할 할 때 하나의 항목 목록 (['']) 만 나타납니다. (또한 공백으로 분리 할 때 매개 변수가 필요하지 않습니다. 기본값입니다.) 루프의 시작시

if len(line.split()) < 2: continue 


이를 해결한다.

+0

매력처럼 작동했습니다! 많은 감사합니다! – Ryan