2017-08-22 99 views
0

我正在编写一个游戏和一个排行榜。我有很高的分数,它存储在一个csv文件中,如果有人击败它,新的高分将覆盖旧的高分,但是我收到了一个我不明白的错误。ValueError:字典包含不在字段名称中的字段:'1'

这里是我的相关代码:

with open ("C:\\Users\\sophie\\Documents\\Sophie\\Homework\\Year 11\\Computer Science\\High_score.csv", 'w') as csvfile: 
     writecsv=csv.writer(csvfile) 
     writer.writerow(str(NumberOfGuesses)) 

这里是我的错误:

Traceback (most recent call last): 
    File "C:/Users/sophie/Documents/Sophie/Homework/Year 11/Computer 
Science/Summer homework.py", line 124, in <module> 
    writer.writerow(str(NumberOfGuesses)) 
    File "C:\Python34\lib\csv.py", line 153, in writerow 
    return self.writer.writerow(self._dict_to_list(rowdict)) 
    File "C:\Python34\lib\csv.py", line 149, in _dict_to_list+ ", ".join([repr(x) for x in wrong_fields])) 
    ValueError: dict contains fields not in fieldnames: '1' 

一开始我读csv文件和变量high_score设置在高分文件。

high_score =() 
    import csv 
    with open 
("C:\\Users\\sophie\\Documents\\Sophie\\Homework\\Year11\\ComputerScience\\Highscore.csv") as csvfile: 
      readcsv=csv.reader(csvfile) 
      for row in readcsv: 
       high_score=(row) 

然后,用户玩游戏,如果他们击败了高分,我希望它覆盖该文件夹中的高分,并用新的更换。

这是这里

if NumberOfGuesses <= (int_high_score):#This shows the high score changes value if that score is higher. 

    with open ("C:\\Users\\sophie\\Documents\\Sophie\\Homework\\Year 11\\Computer Science\\High_score.csv", 'w') as csvfile: 
     writecsv=csv.writer(csvfile) 
     writer.writerow(str(NumberOfGuesses)) 
+0

'NumberOfGuesses'看起来像什么? –

+0

NumberOfGuesses是一个变量,每当他们猜到一个数字时就会增加一个,这是错误的。这就像一个主谋游戏,然后如果他们击败最高分,它应该保存到一个CSV文件,但我得到这个奇怪的错误。 –

+0

错误来自csv.DictWriter,它用于将字典写入csv。通过将字符串传递给默认的csv编写器不会抛出此错误。要重现这个错误,我不得不写: '开放的( 'test.csv', 'W')为f: W = csv.DictWriter(F,[ '东西']) w.writerow( {1:'s'}) ' –

回答

1

好所示,我已经发现有什么错代码:

with open ("C:\\Users\\sophie\\Documents\\Sophie\\Homework\\Year 11\\Computer Science\\High_score.csv", 'w') as csvfile: 
    writecsv=csv.writer(csvfile) 
    writer.writerow(str(NumberOfGuesses)) 

,第二行上,您实例化writecsv作为作家,但在第三行,你写到一些 csv,使用不同的作者,称为writer

推测writer来自代码中的其他位置。将代码更改为:

with open ("C:\\Users\\sophie\\Documents\\Sophie\\Homework\\Year 11\\Computer Science\\High_score.csv", 'w') as csvfile: 
    writecsv=csv.writer(csvfile) 
    writecsv.writerow(str(NumberOfGuesses)) 

而且这将解决此特定错误。

+0

谢谢,那已经工作了! –

+0

乐于帮助。给我一个upvote,接受答案,给予业力:D。 –

+0

此外,还有在中学和python以及暑假期间编写代码的道具! Python很棒。 –

0

所以我不得不日前编写类似的东西,这是我是如何做到的:

def writeFile(path,x): 
    returnList = [] 
    returnList.append(x) 
    with open(path,'w') as csvfile: 
     spamwriter = csv.writer(csvfile,delimiter=' ', lineterminator='\n') 
     spamwriter.writerow(returnList) 

在你的代码中,我注意到两两件事:

首先,你的名字一个CSV文件。作家对象,不要再在第二行使用它:

writecsv=csv.writer(csvfile) 
writer.writerow(str(NumberOfGuesses)) 

我不知道为什么,但根据经验,writerow似乎只与名单工作;所以你可能想在你写整数之前把你的整数加到列表中。

相关问题