Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用CSV更改文件中的特定行_Python_Python 3.x - Fatal编程技术网

Python 使用CSV更改文件中的特定行

Python 使用CSV更改文件中的特定行,python,python-3.x,Python,Python 3.x,我目前正在努力为我正在进行的一场比赛取得高分。这个想法是记录分数,并对照文件检查匹配的用户名。如果他们匹配并且记录的分数在文件上较低,则创建一个新文件,除了分数较低的一行之外的所有内容都将被复制,然后记录当前用户名和分数。然后删除旧文件,并重命名新文件以匹配 不幸的是,这似乎不起作用。代码似乎无法跨多个方向复制,这意味着我必须插入另一个脚本以确保它能够复制,这有时会记录错误的结果(较低),然后读取错误的结果(readfile.[row])。我用另一种方法还是继续用这种方法更好 import cs

我目前正在努力为我正在进行的一场比赛取得高分。这个想法是记录分数,并对照文件检查匹配的用户名。如果他们匹配并且记录的分数在文件上较低,则创建一个新文件,除了分数较低的一行之外的所有内容都将被复制,然后记录当前用户名和分数。然后删除旧文件,并重命名新文件以匹配

不幸的是,这似乎不起作用。代码似乎无法跨多个方向复制,这意味着我必须插入另一个脚本以确保它能够复制,这有时会记录错误的结果(较低),然后读取错误的结果(readfile.[row])。我用另一种方法还是继续用这种方法更好

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])
返回真值
比如像这样的。你甚至可以让它返回真或假,这样你就可以知道这是一场得分很高的比赛。不需要执行临时文件,只覆盖旧文件会更容易