我一直在尝试对我从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
。
答案 0 :(得分:0)
您正试图呼叫rdr
阻止范围之外的with
,该阻止会自动调用您文件对象上的exit
协议(包括file.close()
行的内容你显然无法处理已关闭的文件,从而导致错误。
但是,您还应该记住一些事项:
将return
移动到with
块内部是行不通的,因为rdr
是一个类似文件的对象,这意味着迭代它会将文件光标移动到结束。我不太确定像excel.seek(0)
这样做(通常会将文件对象光标移回文件的开头)会在这种情况下起作用,因为你正在使用csv.reader
这是不必要的,因为您似乎可以像this link
sort by keys
示例那样做
醇>