我的代码目前将包含类别分数的字典写入CSV文件。这部分是由程序正确完成的,分数写入文件,但是不打印写入文件的最新字典。例如,在代码运行一次之后,它将不会被打印,但是一旦代码再次运行,则会打印第一位数据但新数据不是。谁能告诉我哪里出错了?
SortedScores = sorted(Class10x1.items(), key = lambda t: t[0], reverse = True) #this sorts the scores in alphabetical order and by the highest score
FileWriter = csv.writer(open('10x1 Class Score.csv', 'a+'))
FileWriter.writerow(SortedScores) #the sorted scores are written to file
print "Okay here are your scores!\n"
我猜这个问题在某处,但是我无法确定它是什么或在哪里。我试图通过在读回r,r +和rb时更改文件的模式来解决这个问题,但是所有这些都有相同的结果。
ReadFile = csv.reader(open("10x1 Class Score.csv", "r")) #this opens the file using csv.reader in read mode
for row in ReadFile:
print row
return
答案 0 :(得分:1)
在处理文件对象时,最好使用with关键字。这样做的好处是,即使在路上引发异常,文件也会在套件完成后正确关闭。它也比编写等效的try-finally块短得多:
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
文件对象有一些额外的方法,比如isatty()和truncate(),它们使用频率较低;有关文件对象的完整指南,请参阅库参考。
我不确定为什么他们将这些内容埋在文档中,因为它确实非常有用并且是一个非常常见的初学者错误:
SortedScores = sorted(Class10x1.items(), key = lambda t: t[0], reverse = True) #this sorts the scores in alphabetical order and by the highest score
with open('10x1 Class Score.csv', 'a+') as file:
FileWriter = csv.writer(file)
FileWriter.writerow(SortedScores) #the sorted scores are written to file
print "Okay here are your scores!\n"
这将为您关闭文件,即使出现错误也可以防止多种数据丢失的可能性
它似乎没有写入文件的原因是因为当你执行.write_row()
时它不会立即写入硬盘驱动器,只会写入一个偶尔会在硬盘中清空的缓冲区驱动,虽然只有一个写语句,但它不需要清空。
答案 1 :(得分:0)
请记住在操作后关闭文件,否则数据将无法正确保存。
尝试使用with
关键字,以便Python为您处理关闭:
import csv
with open('10x1 Class Score.csv', 'a+') as f:
csv_writer = csv.writer(f)
# write something into the file
...
# when the above block is done, file will be automatically closed
# so that the file is saved properly