从Csvfile中排序OrderedDict

时间:2015-12-07 23:45:15

标签: python csv

我一直在尝试对我从csv文件中提取的OrderedDict进行排序,但它总是给我错误ValueError: I/O operation on closed file.我真的不知道我做错了什么,Google搜索给了我没有答案。

我的代码是:

def exsort(filen):
dic={}
with open(filen) as excel:
    rdr = csv.reader(excel)
    next(excel)
    for cell in rdr:
        dic[cell[0]] = float(cell[1]), float(cell[2])
return OrderedDict(sorted(rdr, key=lambda x: x[0]))

csv文件的值为:

['Alison', '100', '0']
['Bart', '100', '5']
['Claris', '100', '10']
['Danny', '90', '0']
['Evelyn', '90', '5']

我基本上想要打印一个按名称排序的OrderedDict

1 个答案:

答案 0 :(得分:0)

您正试图呼叫rdr阻止范围之外的with,该阻止会自动调用您文件对象上的exit协议(包括file.close()行的内容你显然无法处理已关闭的文件,从而导致错误。

但是,您还应该记住一些事项:

  1. return移动到with块内部是行不通的,因为rdr是一个类似文件的对象,这意味着迭代它会将文件光标移动到结束。我不太确定像excel.seek(0)这样做(通常会将文件对象光标移回文件的开头)会在这种情况下起作用,因为你正在使用csv.reader

    < / LI>
  2. 这是不必要的,因为您似乎可以像this link

  3. 中的sort by keys示例那样做
相关问题