2017-02-19 305 views
0

所以我想挑一些數據出來的文本文件,它看起來像這樣:Python的.find()返回找到字符串的結尾

##After some other stuff which could change 
EASY:[5,500] 
MEDIUM:[10,100] 
HARD:[20,1000] 
EXPERT:[30,2000] 
EXTREME:[50,5000] 

我寫它使用難度功能('EASY''HARD'等)返回以下列表。我當前的代碼如下所示:

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:我找不到任何重複的東西,但它是一個有點奇怪的問題,所以很抱歉,如果它已經在這裏某處;在此先感謝

編輯:感謝您的答覆,我想你基本上都解決了這個問題,但所選擇的答案是becasue我喜歡迭代行由行的主意,乾杯傢伙:)

回答

0

那麼,如果該文件看起來像這樣,爲什麼不只是逐行迭代並做類似的事情:

def setAI(difficulty): #difficulty='EASY' or 'HARD' or...e.t.c) 
    configFile=open('AISettings.txt') 
    config=configFile.readlines() 
    for line in config: 
     if line.startswith(difficulty.upper()): 
      print(line[len(difficulty) + 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]) 
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])