为什么我的CSV文件没有打印?

时间:2016-01-26 20:05:43

标签: python csv dictionary

我的代码目前将包含类别分数的字典写入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

2 个答案:

答案 0 :(得分:1)

来自Input output- python docs

在处理文件对象时,最好使用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