我正在尝试创建一个函数,该函数打开一个文件进行读取,跳过第一行,因为它是标题,获取每一行并在“:”处拆分以获取要放入字典中的键和值,然后返回该值字典。我的问题是我的功能只是给我一本空字典。我该如何解决?
ex from line 2: 'Bulbasaur': (1, 'Grass', 'Poison', 1, False)
'Bulbasaur' 是键,冒号后面的所有内容都是该键的值。
So I need to return: my_dict={'bulbasaur':(1, 'Grass', 'Poison', 1, False)}
这是我的功能:
def read_info_file(filename):
f=open(filename, 'r') #open file for reading
lines=f.readlines()[1:] #skip first line
d={} #create dictionary
for lines in f: #iterate for all lines
x=lines.split(':') #split at colon
a=x[0] #map keys to values
b=x[1]
d[a]=b #add to dictionary
return d #return dictionary
最佳答案
f = open(filename, 'r')
为您提供文件行上的迭代器。
执行 lines = f.readlines()[1:]
后,迭代器已生成其所有值,因为 readlines
的调用会调用 __next__
在 f
上,直到没有剩余的行。
现在问题来了:完成所有这些之后,您发出 forlines in f
,即您尝试再次循环迭代器。但由于它是空的,您的 for
循环体将永远不会被执行。
有多种方法可以修复您的代码。最直接的方法是循环遍历列表 lines
,而不是 f
,即类似于 for line inlines
。
另一方面,您似乎不需要在迭代之前获得所有行的完整列表,因此请考虑直接循环 f
而不调用 readlines
事先。
关于Python文件i/o循环,为什么字典没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43480746/