2017-12-20 10 views
0

」が、私はこのようになりますPythonで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)のインデックスを探しますが、Pythonは、その後「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. あなたの関数は値を返しませんでしたPythonの機能を使用して空白や改行を削除することができますので、正しく実行されたとしても、inwonersからNoneが得られます。

次の例では動作します:

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はリストにありません –

関連する問題