我正在尝试将下面的csv文件中的数据拉入字典,但我的代码返回关闭文件错误的操作。
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 :(得分: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