2017-02-13 3 views
0

私は初めての小切手帳を読むためのPythonスクリプトに取り組んでいます。レジスタの詳細は、CSVファイルに格納されていますcsvファイルを読み込んでdictキーとして浮動小数点数を使用するPython 3.6

date,chk num,description,amount,cleared state 

また、csvファイルは、個人小切手や銀行からダウンロードされたトランザクションの組み合わせです。理想的には、各レコードの2つのコピーがあります:小切手帳からのものと銀行からのものです。現実には、小切手帳リストには表示されない銀行記録やその他の奇妙なものがあります。

私がperlでこれを行っていたなら、私は一意の各レベルのハッシュのハッシュを持っていました。私はここでdictsを使用しようとしていますが、キー値の問題が発生しました。具体的には、最初の一意性キーはトランザクションの量です。これは正確に2桁の10進数なし桁区切りと正または負のフロートが考えられます。

import csv 

with open('C:/my/bank/docs/combined.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 

    for row in reader: 
     # 
     # value 
     if dataset.get(row[3]) != None: 
... 

など、ラ1234567.89または-0.24これは、ファイルの最初の値が-2844.29であることが判明しました。 if dataset.get(row[3]) != None:行に keyErrorが表示されます。それは鍵 "-2844.29"について不平を言う。

csvファイルは値を「引用」しないので、floatとして扱われていると想定しています。私はその後、

 if dataset.get('{:.2f}'.format(row[3])) != None: 

stringに変換しようとするが、それは私に語った:ValueError: Unknown format code 'f' for object of type 'str'。私は何が欠けていますか?

答えて

1

type()機能を使用してオブジェクトの種類を確認できます。例えば:

print(type(row[3])) 

ます。また、それが一致するかどうかを確認するためにdatasetオブジェクトにあなたの鍵の種類を確認することができます。

とにかく、csv.readerは、読み込んだものをcsvファイルにキャストしません。 rowオブジェクトはliststrであり、datasetキーがstrの場合はキャストする必要はありません。あなたが受け取るエラーは.fコード(実際には数値タイプ専用)を使用してstrをフォーマットしようとしているためです。

しかし

あなたがdataset.get(row[3])をしようとしたときにあなたのコードは、働いているはずです。私はあなたのデータセットが正しく構築されていないと思う(私はここでこのオブジェクトの初期化を見ることはできません)、それは実際にはキーとして-2844.29が文字列として含まれているかどうかを確認するために完全に表示しようとする必要があります(dataset実際にstrのキーが含まれており、floatではありません。

関連する問題