2017-10-10 31 views
0

我想将以下csv文件中的数据拖入字典中,但是我的代码返回关闭文件错误的操作。关闭文件将数据拖入字典时出错

enter image description here

LotrGrade = {} 

with open('grade_list_large.csv', 'r') as FOpen: 
    line = FOpen.readline() 
    LotrGrade = {} 


for line in FOpen: 
    grades = [] 
    line = line.rstrip() 
    Name = line.split(',') 
    NameKey = Name[0] 
    GradeValu = list(Name[1]) 
    while True: 
     if NameKey in LotrGrade.keys()== True: 
      LotrGrade.setdefault(NameKey).append(GradeValu) 
     else: 
      LotrGrade[NameKey] = GradeValu 

    else: 
     False 
     print(LotrGrade) 

回答

0

1期

with open('grade_list_large.csv', 'r') as FOpen: 
     line = FOpen.readline() 
     LotrGrade = {} 

在这一点上,你关闭文件FOpen1缩进块之后。如果选中了Python docs

它与文件打交道 对象时使用关键字用好的做法。这样做的好处是,文件后 其整套完成正常关闭,即使有异常你不能在此行访问FOpen1方式

所以

for line in FOpen 

要阅读募集文件中的行因为你已经关闭了它。

第2期

下面的语句没有任何意义

with open('grade_list_large.csv', 'r') as FOpen: 
    line = FOpen.readline() 
    LotrGrade = {} 

本质上讲,你打开一个文件,从中读取一行line并关闭它。截至目前,您刚刚阅读文件的第一行。 如果修改这些语句

with open('grade_list_large.csv', 'r') as FOpen: 
    lines = FOpen.readlines() 
    LotrGrade = {} 

以后可以通过lines环路

for line in lines: 
    # do something 
0

发生这种情况,因为当你使用with关键字来打开一个文件时,它会自动关闭该文件with块的结尾。

所以错误发生在for line in FOpen:,因为FOpen已关闭。

解决此问题的两种方法是将所有逻辑移入with语句(这会在脚本运行时保持文件打开状态),或者在文件关闭之前将数据解析出文件并放入列表中打开文件以读取数据然后关闭它)。我更喜欢后者,但取决于你。这是第二种方法的一个例子。

data = [] 
open('grade_list_large.csv', 'r') as FOpen: 
    for line in FOpen: 
     data.append(line) 
    LotrGrade = {} 

for d in data: 
    # do some work