将数据拖入字典时关闭文件错误

时间:2017-10-10 03:09:40

标签: python-3.x file dictionary

我正在尝试将下面的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)

2 个答案:

答案 0 :(得分:0)

第1期

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

此时,在缩进块之后关闭文件FOpen1。如果您查看Python docs

  

最好在处理文件时使用with关键字   对象。这样做的好处是文件在之后正确关闭   它的套件完成,即使在路上引发异常

因此,您无法访问此行中的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

答案 1 :(得分: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