2014-06-11 2 views
0

를 작동 튜플 나는 다음과 같은 기능을 썼다 :변환이 간헐적으로

읽고 잘 튜플 this file로 변환
def read_data(filename): 

    lines = [line.strip() for line in open(filename)] 

    coordinates = [line.split(' ') for line in lines] 

    coordinates = [(float(c[0]), float(c[1])) for c in coordinates] 

    return tuple(coordinates) 

.

그러나 this filethis one에서 실패합니다.

coordinates = [(float(c[0]), float(c[1])) for c in coordinates] 
ValueError: could not convert string to float: 

왜이 오류가 나타나지 않고 problem0.dat을 읽을 때 왜 나타나지 않습니다

?

답변

2

것은 그것은이 라인에 실패하는 것 :

82.0 7.0 

그리고 두 개의 인접한 공백 문자를 다른 라인을 각 라인을 분할 line.split(' ')을 사용하고 있기 때문이다. 구분 기호로 ' '을 사용하면 split 호출은 원하는 번호가 아니고 ['82.0', '', '7.0']을 반환하고 프로그램을 중단시킵니다. 대신 line.split()을 사용하여 문제를 해결할 수 있습니다. 인접한 공백 문자를 올바르게 처리합니다.

str.split ([9월 [maxsplit]) 9월 주어지면

는 연속 분리가 그룹화되지 않고 이 간주된다

docs이 동작을 설명 빈 문자열을 구분합니다 (예 : '1,, 2 '.split (', ') 은 ['1 ',' ','2 ']를 반환합니다). sep 인수는 여러 개의 문자로 구성 될 수 있습니다 (예 : '1 <> 2 <> 3'.split ('<> ')은 ['1 ','2 ', '3 ']를 반환합니다). 빈 문자열을 지정된 구분 기호로 분리하면 [ '']이 (가) 반환됩니다.

...

9월 지정 또는 없음, 다른 분할 알고리즘을 적용하지 있지 않은 경우 연속적인 공백의 실행이 하나의 세퍼레이터로 간주되고, 그 결과는 상기 빈 문자열을 포함하는 것 문자열에 선행 공백이나 후행 공백이 있으면 시작 또는 끝냅니다.

두 개의 연속 공백 문자가있는 항목이 없으므로 첫 번째 파일이 작동합니다.