2017-03-02 67 views
0

我想將文本文件中的特定行添加到字典中。這個想法是將所有以AUD開頭的行添加到AUD字典中,並用它們的鍵。然後是CAD,然後放在列表中。僅將文本文件中的特定行添加到字典中

我已經嘗試了一些搜索和添加一點點的變體。我對答案很好奇,因爲我是錯誤,他們在學習時意味着什麼。我在Python的開始,並且如果我的嘗試使你的眼睛流血而道歉。非常感謝您的時間。

這是.txt文件pastebin

這增加了一切一本字典,我只想格式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'

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

你已經接近你的第一個例子。

你不需要== Trueif語句,因爲str.startswith()返回這是由if evaulated一個布爾值。隨着我糾正了一些縮進。

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] 我看* AUD [add this entry] *但我不明白索引 謝謝(再次) – 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_'來產生轉換的貨幣。您可以通過選取前三個字母作爲字典名稱來編寫字典,進一步改進腳本。

+0

感謝您的時間....我得到「ValueError:需要超過1個值才能解包」 我可以看到.append在我的原始文件中也不是必需的,所以這很好理解。 再次感謝 – Pale

+0

發生這種情況時,split()只返回一個值,因爲行不能被分割(例如空行等)。通過試着解決這個問題,抓住循環中的線條或者測試你的線條是否有空行等等。 – 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 

在你的核心只是用file.readlines()替換data.split('\ n')。

+0

謝謝我真的很喜歡這些筆記,所以我可以看到每一行都在做什麼。這與我想要的更接近......並且還要感謝有關清潔數據的提示。 – Pale

相關問題