gpt4 book ai didi

python - 使用循环在 .ini 文件中分配已知数量的变量

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:17 24 4
gpt4 key购买 nike

编辑 - 我已设法找到问题的解决方案,答案在页面底部。

我有一个 .ini 文件,其中包含未知数量的变量,由 python 脚本通过 IRC 界面创建。

.ini文件格式如下:

[varables]
0 = example
1 = example2
2 = exapmle3
#and so on.

我想对 .ini 文件中的变量做的是将 .ini 文件中的每个单独变量附加到列表中。

这是我用来尝试完成此任务的主要 Python 文件中的代码:(不是整个文件,而是用于执行此任务的内容。)

import ConfigParser
import os

#Config parser:
class UnknownValue(Exception): pass
def replace_line(old_line, new_line):
f = open("setup.ini")
for line in f:
line = os.linesep.join([s for s in line.splitlines() if s])
if line == old_line:
f1 = open("setup.ini",'r')
stuff = f1.read()
f1.close()
new_stuff = re.sub(old_line,new_line,stuff)
f = open("setup.ini",'w')
f.write(new_stuff)
f.close()
def get_options(filename):
config = ConfigParser.ConfigParser()
try:
config.read(filename)
except ConfigParser.ParsingError, e:
pass
sections = config.sections()
output = {}
for section in sections:
output[section] = {}
for opt in config.options(section):
value = config.get(section, opt)
output[section][opt] = value
return output

bot_owners = []#this becomes a list with every varable in the .ini file.


#gets the number of varables to be set, then loops appending each entry into their corosponding lists for later use.
setup_file = get_options("owner.ini")
num_lines = (sum(1 for line in open('owner.ini'))-1)#gets amount of varables in the file, and removes 1 for the header tag.
print "lines ", num_lines
x = 0
while x != num_lines:
#loops through appending all the varables inside of the .ini file to the list 'bot_owners'
y = str(x)
bot_owners.append(setup_file['owners'][y])#this fails becuase it can't take a varable as a argument?
x += 1

print (bot_owners)
print (num_lines)

我使用这一行找出 .ini 文件中的变量数:

num_lines = (sum(1 for line in open('owner.ini'))-1)#gets amount of varables in the file, and removes 1 for the header tag.

我可以通过这样做将 .ini 文件中的每个变量附加到列表中:

bot_owners.append(setup_file['owners']['0'])
bot_owners.append(setup_file['owners']['1'])
bot_owners.append(setup_file['owners']['2'])
#ect

但这需要我知道 .ini 文件中的变量数量,我不知道,而且尝试这样做是愚蠢的,因为它对 .ini 文件中的变量数量施加了限制可以包含,并且它需要大量代码,而这些代码本来可以大大减少。

if num_lines == 1:    
bot_owners.append(setup_file['owners']['0'])
elif num_lines == 2:
bot_owners.append(setup_file['owners']['1'])
elif num_lines == 3:
bot_owners.append(setup_file['owners']['2'])
#ect

这段代码的错误是我的循环:

x = 0 #what varable is going to be appended
while x != num_lines:
#loops through appending all the varables inside of the .ini file to the list 'bot_owners'
y = str(x)
bot_owners.append(setup_file['owners'][y]) #<-- THE PROBLEM
x += 1

bot_owners.append(setup_file['owners'][y]) 行出现以下错误:

KeyError: '0'

documentaion上看了一圈之后对于 Python 的 configParser 库,如果我是正确的,这个错误是由第二个参数 [y] 引起的,因为变量不能用作参数,即使变量包含字符串这可能是“1”,但 bot_owners.append(setup_file['owners']["1"]) 有效。

我在这里要问的是,是否有另一种方法可以做到这一点,或者我如何使用循环将 .ini 文件中的每个单独变量附加到列表中。

最佳答案

不幸的是,ConfigParser 本身并不真正支持列表。

如果有一个字符可以安全地用作定界符,一个可行的解决方法是将列表打包成定界字符串,然后在读取配置文件时解压该字符串。

对于逗号分隔符:

[MYSECTION]
mylist = item1,item2,item3

然后在客户端代码中使用 config.get('MYSECTION', 'mylist').split(',')

多行选项也是允许的。然后它会像

[MYSECTION]
mylist =
item1
item2

您将在客户端代码中使用 str.splitlines()

关于python - 使用循环在 .ini 文件中分配已知数量的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com