我想檢查文本檔案中的分數值,如果給定名稱的分數值小于新分數而不是更新它。
我有以下文本檔案:
哈利·懷特,8
威廉·羅斯,9
羅恩·韋斯萊,10
現在,我有以下功能:
def set_score(name,score):
s = open('sc.txt','r ')
scorelist = s.readlines()
present=False
for i in scorelist:
check = i.split(',')[0]
if(check==name):
present=True
score1= i.rstrip('\n').split(',')[1]
if(score1<score):
i.replace(score,score1)
break;
if(present==False):
s.write(name "," score)
s.close()
set_score("William Ross","10")
它不會更新值。為什么?
我檢查了,if 條件運行但替換陳述句不起作用。
uj5u.com熱心網友回復:
不一定是最有效的,但也許更清楚。
打開檔案進行閱讀并將其內容加載到字典中。
如果該名稱存在于字典中,則比較分數。如果新分數大于舊分數,則更新字典。
打開要寫入的檔案并將更新的字典內容轉儲到其中。
FILENAME='sc.txt'
def set_score(name, score):
d = dict()
with open(FILENAME) as sf:
for line in map(str.strip, sf):
ns, cs = line.split(',')
d[ns] = int(cs)
if (old_score := d.get(name)) is None or old_score < score:
d[name] = score
with open(FILENAME, 'w') as sf:
for k, v in d.items():
print(f'{k},{v}', file=sf)
set_score('William Ross', 10)
請注意,僅在需要更改時才重新打開檔案(用于寫入)
編輯:
從其他地方的評論看來,如果檔案中不存在該名稱,則應添加該名稱。邏輯相應改變
uj5u.com熱心網友回復:
因為該名稱已經存在于檔案中,而您的代碼僅在不存在時才write存在。
如果您想在名稱存在時更改檔案,那么write在這種情況下您也需要更改檔案(更改字串不會影響檔案,正如您所發現的)。
uj5u.com熱心網友回復:
您無法更改迭代器本身,但這就是您正在做的事情:
for i in scorelist:
(...)
i.replace(score, score1)
試試這個:
for ix, i in enumerate(scorelist):
(...)
scorelist[ix].replace(score, score1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458922.html
上一篇:在JAR檔案中找不到檔案
