使用txt文件在python中定义多个变量

时间:2018-02-12 00:04:14

标签: python

背景资料

我有一个程序,我用它来ping服务并将结果打印回窗口。我目前正在尝试通过添加一种“设置”文件添加到此程序中,用户可以编辑该文件来更改a)被ping的主机和b)超时

到目前为止我尝试了什么

file = open("file.txt", "r")
print (file.read())
settings = file.read()

# looking for the value of 'host'

pattern = 'host = "(.*)'
variable = re.findall(pattern, settings)[0]
print(test)

至于file.txt文件中包含的内容:

host = "youtube.com"
pingTimeout = "1"

然而,我的尝试没有成功,因为这提出了以下内容 错误:

  

IndexError:列表索引超出范围

所以,我的问题是:

有人能指出我正确的方向吗?回顾一下,我问我如何从文件中获取输入(在本例中为host =“youtube.com”并将其保存为python文件中的变量'host')。

2 个答案:

答案 0 :(得分:0)

首先,正如Patrick Haugh指出的那样,你不能在同一个文件对象上调用read()两次。其次,使用正则表达式来解析简单的key = value格式有点过分。

host, pingTimeout = None,None # Maybe intialize these to a default value
with open("settings.txt", "r") as f:
    for line in f:
        key,value = line.strip().split(" = ")
        if key == 'host':
            host = value
        if key == 'pingTimeout':
            pingTimeout = int(value)

print host, pingTimeout

请注意,预期的输入格式没有上述示例代码的引号。

host = youtube.com
pingTimeout = 1

答案 1 :(得分:0)

我试过这个,这可能会有所帮助:

import re
filename = "<your text file with hostname>"
with open(filename) as f:
   lines = f.read().splitlines()

for str in lines:
   if re.search('host', str):
      host, val = str.split('=')
      val = val.replace("\"", "")     
      break 

host = val    
print host
f.close()