所以我想从文本文件中选择一些数据,如下所示:
##After some other stuff which could change
EASY:[5,500]
MEDIUM:[10,100]
HARD:[20,1000]
EXPERT:[30,2000]
EXTREME:[50,5000]
我正在编写一个使用难度的功能(' EASY'' HARD' e.t.c)来返回以下列表。我目前的代码如下:
def setAI(difficulty): #difficulty='EASY' or 'HARD' or...e.t.c)
configFile=open('AISettings.txt')
config=configFile.read()
print(config[(config.find(difficulty)):(config.find(']',(config.find(difficulty))))]) #So it will return the chunk between the difficulty, and the next closed-square-bracket after that
这会产生以下输出:
>>> HARD:[20,1000
我试着像这样修理它:
print(config[(config.find(difficulty)+2):(config.find(']',(config.find(difficulty)+2))+1)])
返回:
>>>RD:[20,1000]
我试图解决的问题是我希望它在冒号之后开始,我知道我可以使用难度字符串的长度来解决这个问题,但是有一种更简单的方法可以解决这个问题。使用.find()命令时字符串的结尾?
P.S:我找不到任何重复的内容,但这是一个有点奇怪的问题,如果它已经在某处,那就很抱歉;提前致谢 编辑:感谢你的回复,我认为你基本上都解决了这个问题,但选择的答案是因为我喜欢迭代逐行的想法,干杯们:)答案 0 :(得分:0)
如果文件看起来像这样,为什么不逐行迭代并执行以下操作:
hexasc
答案 1 :(得分:0)
查找返回位置。但是范围假设它们的结束号不应该包括在内。只需添加一个即可。
config = """
##After some other stuff which could change
EASY:[5,500]
MEDIUM:[10,100]
HARD:[20,1000]
EXPERT:[30,2000]
EXTREME:[50,5000]
"""
difficulty = 'HARD'
begin = config.find(difficulty)
end = config.find(']', begin)
print(config[begin:end+1])
答案 2 :(得分:0)
函数find
将始终为您提供字符串第一个字母的位置。另请注意,符号string[start:end]
将为您提供子字符串,包括 start
处的字符,但不包括字符。因此,您可以使用以下内容:
def setAI(difficulty):
configFile = open('AISettings.txt')
config = configFile.read()
start = config.find(difficulty) + len(difficulty) + 1
end = config.find(']', start) + 1
print(config[start:end])