2017-03-02 3 views
0

テキストファイルの特定の行を辞書に追加したいとします。その考え方は、AUDで始まるすべての行をそのキーと共にAUD辞書に追加することです。その後、CADを実行して一覧を表示します。テキストファイルから特定の行だけを辞書に追加する

私は少しのビットを検索して追加することからいくつかの変形を試みました。私は、私が誤りで、私が学んでいるときに彼らが何を意味しているのか、私は答えとして不思議です。私はPythonの始まりであり、私の試みがあなたの目を傷つけるかどうか謝罪します。あなたの時間に非常に感謝します。

これはこれは、辞書にすべてを追加しpastebin

.txtファイルの形式で、私は唯一のAUD

with open('rates.txt') as f: 
for line in f: 
    if line.startswith('AUD') == True: # returns true on pairs I want to add 
    AUD = dict(x.rstrip().split(None, 1) for x in f) #adds everything 
    else: 
     pass 
print AUD 

たい次は「とValueErrorを返されたこの試みた:必要以上の1つの値を「

AUD = {} 
with open("rates.txt") as f: 
    for line in f: 
     if line.startswith('AUD'): 
     (key, val) = line.split(' ') #The space inbetween the '' causes the error? 
     AUD[int(key)] = val 
print AUD 

を解凍すると、最後に私が「KeyError例外: '返すこれに取り組んでいたAUD_CHF'

を210
AUD = {} 
with open("rates.txt") as f: 
    for line in f: 
     if 'AUD_' in line: 
      key, value = line.strip().split('') 
      AUD [key].append(value) 
print AUD 

答えて

0

あなたは近くにいたのです。

ifステートメントに== Trueステートメントが必要ないのは、str.startswith()ifによってエバリュートされたブール値を返すためです。それに沿って、私はいくつかの字下げを修正しました。

AUD = {} 
with open('rates.txt', 'r') as f: 
    for line in f: 
     if line.startswith('AUD'): 
      split_line = line.split() 
      AUD[split_line[0]] = split_line[1] 
     else: 
      pass 
print AUD 
+0

ありがとうございます。ニースと簡単。私は間違ったコードを使っていた場所を見ることができます。再度、感謝します。 – Pale

+0

このお返事があなたや他の人にとって役に立ちましたら、お答えします。 – Harpal

+0

あなたは線を説明してください。 AUD [split_line [0]] = split_line [1] ありがとうございました – Pale

0
AUD = {} 
with open("rates.txt") as f: 
    for line in f: 
     if 'AUD_' in line: 
      key , value = line.lstrip('AUD_').split(' ') 
      AUD[key] = value 
print AUD 

これはトリックを行う必要があります。あなたの文字列「パーサー」を変更して、正面の「AUD_」を取り除いて変換する通貨を直接得ました。最初の3文字を辞書名として、書き込む辞書を選択することで、スクリプトをさらに改善できます。

+0

ありがとうございました....「ValueError:解凍するには1つ以上の値が必要です」 .appendは私のオリジナルでも必要ではないことがわかりました。 ありがとうございました – Pale

+0

split()は1つの値を返すだけです。これは、行を分割できないためです(空行など)。試してみて、ループ内の行をキャッチするか、空行などをテストしてください。 – Dschoni

0

あなたはそれほど遠くの答えではありませんでした。 必ずデータを消去してください。 ファイルが空行で終了することが多いため、分割が失敗する可能性があります。

data = """ 
AUD_CHF 0.77324 
AUD_EUR 0.72657 
AUD_GBP 0.61557 
AUD_JPY 86.88 
AUD_USD 0.76835 
CAD_EUR 0.722459831 
CAD_GBP 0.612726326 
CAD_CHF 0.76915 
CHF_EUR 0.939858457 
CHF_GBP 0.795924865 
""" 

#remove empty lines 
lines = [l for l in (line.strip() for line in data.split('\n')) if l ] 

AUD = {} 

for line in lines: 
    #the two folowing lines could be in a function 
    curencies, rate = line.split() 
    cur1, cur2 = curencies.split('_') 
    #debug 
    #print cur1, '->', cur2, ' ', value 

    if cur1 == 'AUD': 
     AUD[cur2] = rate 


for currency, rate in AUD.items(): 
    print '1 AUD =', rate, currency 

コアでは、単にdata.split( '\ n')をfile.readlines()に置き換えます。

+0

各行が何をしているかを見ることができるように、本当にありがとう。それは私がやりたいことにもっと近いです....また、データのクリーニングに関するヒントもありがとうございます。 – Pale

関連する問題