2016-11-30 60 views
1

我是Python腳本編寫新手。有一個文件,其中包含以下數據無法將第二行添加到Python中的字典

Cascade.from = testvalue1 
cascade.from1 = testvalue2 

上述上下文位於test.txt中。我曾經爲了寫了下面的代碼,把這個字典把它拿來以後的代碼是運行在上面的代碼之後,如下

myvalue = {} 
with open('test.txt', 'r') as myfile: 
    for line in myfile: 
     name, val = line.split('=') 
     myvalue[name] = str(val.strip()) 
     print myvalue 

,我只看到下面的數據 {"cascade.from": "testvalue1"} 它不讀下一行和它的沒有被添加到字典中。 我的期望是:{"cascade.from": "testvalue1", "cascade.from1": "testvalue2"}。所以,當撥打電話myvalue["cascade.from1"]它應該反過來testvalue2 任何人都可以讓我知道什麼是在這裏失蹤?

以上只是一個函數中的一小塊,這裏是我的代碼完成的事情

def readlocalfile(): 
     os.chdir(sub_dir) 
     print ("prinintng current directory" + os.getcwd()) 
     file = open(config_file,'r') 
     file_read = file.readlines() 
     myvars = {} 
     with open(config_file) as myfile: 
      for line in myfile: 
        name, var = line.split("=") 
        myvars[name] = str(var.strip()) 
        print myvars 
        replace_val = myvars["cascade.from1"] 
        print ("the base value is "+ replace_val) 

蔭調用這個函數外,它拋出一個KeyError異常

+0

你缺少':'後'... as myfile'。但是,這應該導致崩潰,而不是你遇到的問題。我添加了':'並嘗試了代碼,它適用於我。 – Cleared

+0

@Cleared爲MYFILE我已經加入後:但仍然不是爲我工作:( –

+1

這是真的,你已經嘗試的代碼是不是你的代碼的純副本或有你「改寫」,它只是這個問題的原因?即時通訊問是因爲你有兩個錯別字到目前爲止,這兩個會導致崩潰。我已經試過上面的代碼,它適用於我... – Cleared

回答

3

首次在循環中,嘗試讀取

myvars["cascade.from1"] 

但關鍵cascade.from1不存在於循環中的第一次,因爲你只加載了第一線,是Cascade.from(密鑰cascade.from1在循環中第二次創建)這就是爲什麼你得到一個錯誤,你的程序第一次在第replace_val= myvars["cascade.from1"]行破裂。因此print myvars僅在循環中第一次運行,當您只讀取文件的第一行時。

要使用

replace_val= myvars["cascade.from1"] 

你必須給它的循環外移動,因爲因斯myvars不包含在循環中的關鍵cascade.from1第一次:

def readlocalfile(): 
    os.chdir(sub_dir) 
    print ("prinintng current directory" + os.getcwd()) 
    file=open(config_file,'r') 
    file_read=file.readlines() 
    myvars = {} 
    with open(config_file) as myfile: 
     for line in myfile: 
      name, var = line.split("=") 
      myvars[name] = str(var.strip()) 
      print myvars 
     replace_val= myvars["cascade.from1"] 
     print ("the base value is "+ replace_val) 
+0

感謝澄清,但我需要閱讀兩條線。我將如何做到這一點? –

+1

通過刪除'replace_val = myvars [「cascade.from1」]'和'print(「基值爲」+ replace_val)「,您將讀取兩行。當你做'replace_val = myvars [「cascade.from1」]''時,你想要做什麼? – Cleared

+0

我試圖檢索級聯的值。from1所以當調用replace_val應該包含testvalu1 –