2017-12-20 37 views
0
I는 다음과 같습니다 파이썬에서 CSV 파일에 읽고 있습니다

:읽기 라인

REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010 
Alabama,2138093,2348174,2646248,2832961,3061743,3266740,3444165,3893888,4040587,4447100,4779736 
Alaska,64356,55036,59278,72524,128643,226167,300382,401851,550043,626932,710231 

내 문제는 내가 처음 읽을 때 그것을 읽으십시오.

REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010 

처음에는 문제가되지 않습니다. 하지만 목록

lijst_eerste_regel = self.eerste_regel.split(",") 

에 너무 많은 분할에 대한 문자열을보고 한 후 STR (2010)의 인덱스를 찾아하지만 파이썬은 다음 '2010'를 찾을 것으로 보인다 이후에하지 "2010". 따라서 색인을 찾을 수 없습니다. 내가 바로 여기에 코드를 게시

당신의 코드가 2010에 이르는 몇 가지 문제가 발견되지되고 있었다

import io 

class Volkstelling: 

    def __init__(self,jaartal,csvb): 
     """ 
     >>> vs2010 = Volkstelling(2010, 'vs_bevolkingsaantal.csv') 
     """ 
     import csv 
     self.jaartal = jaartal 
     self.csvb = csvb 

     self.eerste_regel = next(self.csvb) 

     if str(jaartal) not in self.eerste_regel: 
       raise AssertionError ("geen gegevens beschikbaar") 

    def inwoners(self, regio): 

     lijst_eerste_regel = self.eerste_regel.split(",") 

     plaats_jaartal = lijst_eerste_regel.index(self.jaartal) # here is where the error occurs 

data = """REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010 
Alabama,2138093,2348174,2646248,2832961,3061743,3266740,3444165,3893888,4040587,4447100,4779736 
Alaska,64356,55036,59278,72524,128643,226167,300382,401851,550043,626932,710231""" 
v = Volkstelling('2010',io.StringIO(data)) 
v.inwoners('Alabama') 
## ValueError: '2010' not in list 
+0

'lijst_eerste_regel.index (STR (self.jaartal))'? 'inwoners'가 아닌 '__init__'에서 문자열로만 변환합니다. 또는 데이터를 분할 한 후 변환합니다 (예 : self.eerste_regel.split (".")]'에서 list comprehension list_eerste_regel = [int (s) for s를 사용한다. – jonrsharpe

+0

lijst_eerste_regel.index (str (self.jaartal)) 이것은 내가 직접 시도한 것이지만 "2010"대신 "2010"을 찾습니다. 두 번째 옵션은 내가 얻지 못하는 것입니다. lijst_eerste_regel = self.eerste_regel.split (",") 또는 대신에 이것을 입력하십시오. –

+0

''2010 '== "2010"'. 그것 대신 * 분할을 포함합니다. – jonrsharpe

답변

0

(그것이 내가이 문제를 데 클래스에, 확실하지 그 관련인지 여부) : 당신이 파일을 읽을 경우

  1. 각 라인 끝에서, 일반적으로 \n로 표현하는 newline character 있습니다. 2010 뒤에 개행 문자를 확인하려면 inwoners 함수에 다음 코드를 삽입 :

    print(lijst_eerste_regel)

    당신은 'SOME STRING'.strip()

  2. 함수가 값을 반환하지 않은 파이썬 함수를 사용하여 공백과 줄 바꿈을 제거 할 수 있습니다, 그래서 올바르게 실행 되더라도 Noneinwoners에서 가져옵니다.

다음 예제는 작동 :

import io 

class Volkstelling: 

    def __init__(self,jaartal,csvb): 
     """ 
     >>> vs2010 = Volkstelling(2010, 'vs_bevolkingsaantal.csv') 
     """ 
     import csv 
     self.jaartal = jaartal 
     self.csvb = csvb 

     self.eerste_regel = next(self.csvb) 

     if str(jaartal) not in self.eerste_regel: 
       raise AssertionError ("geen gegevens beschikbaar") 

    def inwoners(self, regio): 

     lijst_eerste_regel = [s.strip() for s in self.eerste_regel.split(",")] 
     plaats_jaartal = lijst_eerste_regel.index(self.jaartal) 

     return plaats_jaartal # Returns the column index where to find the no of inhabitants 

data = """REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010 
Alabama,2138093,2348174,2646248,2832961,3061743,3266740,3444165,3893888,4040587,4447100,4779736 
Alaska,64356,55036,59278,72524,128643,226167,300382,401851,550043,626932,710231""" 

v2 = Volkstelling('1920',io.StringIO(data)) 
print(v2.inwoners('Alabama')) 
## -> prints 2 
v1 = Volkstelling('2010',io.StringIO(data)) 
print(v1.inwoners('Alabama')) 
## -> prints 11 
+0

내 기능이 아직 끝나지 않았기 때문에 반환이 없습니다 (어쨌든 포함시켜야한다는 것을 알고 있습니다). 슬프게도이 기능은 여전히 ​​저와 함께 작동하지 않습니다. 내가 예를 찾으면 1920 년에는 똑같은 문제가 있습니다. 지금까지 나는 그것이 줄의 끝이 아니라는 것을 알고 있으므로 "\ n"의 문제는 거기에서 발생할 수 없다. –

+0

"작동하지 않는다"는 것이 무슨 뜻인지 모른다. 변경 사항을 반영하기 위해 질문을 편집한다. 당신은 무엇을 기대하고 어떤 결과를 얻을 수 있는지 설명합니다. http://idownvotedbecau.se/itsnotworking/ – akraf

+0

내가 할 오류는 ValueError입니다 : 2010은 목록에 없음 –