Python 使用CSV更改文件中的特定行
我目前正在努力为我正在进行的一场比赛取得高分。这个想法是记录分数,并对照文件检查匹配的用户名。如果他们匹配并且记录的分数在文件上较低,则创建一个新文件,除了分数较低的一行之外的所有内容都将被复制,然后记录当前用户名和分数。然后删除旧文件,并重命名新文件以匹配 不幸的是,这似乎不起作用。代码似乎无法跨多个方向复制,这意味着我必须插入另一个脚本以确保它能够复制,这有时会记录错误的结果(较低),然后读取错误的结果(readfile.[row])。我用另一种方法还是继续用这种方法更好Python 使用CSV更改文件中的特定行,python,python-3.x,Python,Python 3.x,我目前正在努力为我正在进行的一场比赛取得高分。这个想法是记录分数,并对照文件检查匹配的用户名。如果他们匹配并且记录的分数在文件上较低,则创建一个新文件,除了分数较低的一行之外的所有内容都将被复制,然后记录当前用户名和分数。然后删除旧文件,并重命名新文件以匹配 不幸的是,这似乎不起作用。代码似乎无法跨多个方向复制,这意味着我必须插入另一个脚本以确保它能够复制,这有时会记录错误的结果(较低),然后读取错误的结果(readfile.[row])。我用另一种方法还是继续用这种方法更好 import cs
import csv, os, sys
def scorewriter():
replac = 0
writein = 1
string_score = str(score)
with open('highscores.txt','r') as csvfile:
highscoresReader=csv.reader(csvfile)
for row in highscoresReader:
for field in row:
#recording high scores
if field == username and string_score > row[1]:
#MUST get to at least here
with open('highscores_temp.txt','a') as csvfiletemp:
highscoresWriter=csv.writer(csvfiletemp)
for row in highscoresReader:
for field in row:
#something wrong here, doesn't sort properly?
if field == username:
writein = 0
replac=1
highscoresWriter.writerow([username,string_score])
else:
highscoresWriter.writerow([field,row[1]])
elif field != username:
continue
elif field == username and string_score <= row[1]:
writin = 0
continue
if writein == 1:
with open('highscores.txt','a') as csvfile:
highscoresnewWriter = csv.writer(csvfile)
highscoresnewWriter.writerow([username,string_score])
if replac == 1:
csvfile.close()
csvfiletemp.close()
os.remove(pathtofile)
导入csv、操作系统、系统
def scorewriter():
replac=0
writein=1
string_score=str(分数)
将open('highscores.txt','r')作为csvfile:
highscoresReader=csv.reader(csvfile)
对于highscoresReader中的行:
对于第行中的字段:
#记录高分
如果字段==用户名和字符串\u分数>行[1]:
#至少要到这里
打开('highscores_temp.txt','a')作为csvfiletemp:
highscoresWriter=csv.writer(csvfiletemp)
对于highscoresReader中的行:
对于第行中的字段:
#这里有问题,排序不正确?
如果字段==用户名:
writein=0
replac=1
HighScoreWriter.writerow([用户名、字符串\分数])
其他:
HighScoreWriter.writerow([字段,第[1]行])
elif字段!=用户名:
持续
elif字段==用户名和字符串\u分数这似乎过于复杂。你最好把所有的数据读入口述,然后处理好分数与高分之间的逻辑关系
import csv
def write_score(hs_file_name, username, score):
high_scores = dict()
with open(hs_file_name) as hsfile:
for row in csv.reader(hsfile):
try:
high_scores[row[0]] = row[1]
except IndexError:
pass
if username not in high_scores:
high_scores[username] = score
elif high_scores[username] < score:
high_scores[username] = score
else:
return False
with open(hs_file_name, mode="w") as hsfile:
writer = csv.writer(hsfile)
for k, v in high_scores.items():
writer.writerow([k, v])
return True
导入csv
def write_分数(hs_文件名、用户名、分数):
高分=dict()
打开(hs_文件名)作为hsfile:
对于csv.reader(hsfile)中的行:
尝试:
高分[第[0]]=第[1]行
除索引器外:
通过
如果用户名不在高分中:
高分[用户名]=分数
elif高分[用户名]<分数:
高分[用户名]=分数
其他:
返回错误
打开(hs_file_name,mode=“w”)作为hsfile:
writer=csv.writer(hsfile)
对于高分的k,v。items():
writer.writerow([k,v])
返回真值
比如像这样的。你甚至可以让它返回真或假,这样你就可以知道这是一场得分很高的比赛。不需要执行临时文件,只覆盖旧文件会更容易