所以基本上我有一个像这样的文本文件设置。
[IP] 192.168.22.12
[NAME] gtty
[COMMAND] i2203320
我想用标签读取我文件中的所有内容[IP],然后我会检查上面的IP,因为这些将是我使用代码的系统的一些设置现在使用就是这个。
while line != '':
if (line == '[IP]'):
List [0] == line[5:]
它真的不是最好的,我希望它能更好地工作。我必须为我添加的每个新行设置if语句,我只是希望它更简单,例如可能有一个列表或具有命名值的东西,并且当我读取文件时它已经在寻找值并分配他们对它。
nameList = ['[IP]': line.read()]
就像我所理解的那样,那个语法可能是错的,但我只是想举个例子,所以每个人都知道我想说的是什么。
关于BSD _,
答案 0 :(得分:3)
用正则表达式做,很容易解析:
import re
pat = re.compile(r'\[(.*?)\](.*)')
settings = {}
with open('your_file') as fd:
for line in fd:
m = pat.match(line)
if m is None: continue
settings[m.group(1)] = m.group(2).strip()
现在一切都应该在settings
。
通过以下方式获取IP信息:
ip = settings['IP']
反向操作:
with open('your_file', 'w') as fd:
for k, v in settings.items():
fd.write('[{}] {}\n'.format(k, v))
答案 1 :(得分:1)
在对象中的数组上添加键。
obj = {};
with open("text.txt", "r") as f:
for line in f:
key = line.split()[0]
try:
obj[key]
except:
obj[key] = []
obj[key].append(line.split()[1])
for key in obj:
print key, obj[key]
答案 2 :(得分:1)
这将生成文件中所有设置的字典。这假定文件的语法始终采用所描述的样式。
输入:
[IP] 192.168.22.12
[NAME] gtty
[COMMAND] i2203320
settings = {}
with open("text.txt", "r") as f:
for line in f:
items = line.split()
settings[items[0]] = ' '.join(items[1:])
输出:
{"[IP]":"192.168.22.12", "[NAME]":"gtty, "[COMMAND]":"i2203320"}
然后,您可以通过调用settings["[IP]"]
在需要时获取IP或任何设置。你当然可以很容易地编辑它,只添加实际以[]项开头的行,只有一个额外的if-case。