2016-11-30 65 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 –