Python .find()返回找到的字符串的结尾

时间:2017-02-19 15:42:44

标签: python file

所以我想从文本文件中选择一些数据,如下所示:

##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:我找不到任何重复的内容,但这是一个有点奇怪的问题,如果它已经在某处,那就很抱歉;提前致谢

编辑:感谢你的回复,我认为你基本上都解决了这个问题,但选择的答案是因为我喜欢迭代逐行的想法,干杯们:)

3 个答案:

答案 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])