Python文件i/o循环,为什么字典没有更新?

标签 python dictionary for-loop io

我正在尝试创建一个函数,该函数打开一个文件进行读取,跳过第一行,因为它是标题,获取每一行并在“:”处拆分以获取要放入字典中的键和值,然后返回该值字典。我的问题是我的功能只是给我一本空字典。我该如何解决?

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/

相关文章:

python - tensorflow 模型不更新权重

python - 将 4D float 组从 txt(字符串)文件转换为 numpy float 组

c# - JSon反序列化哈希

java - 我应该使用什么类型的列表/ map 来对数据进行分类但保持顺序?

java - 根据某些数组元素的状态更改按钮的颜色

python - 如何使用 numpy 种子创建确定性随机数生成器?

python - 在Python中计算每年的不同ID

Python字典;相同键的值之和

java - 我对 jQuery 中淡入淡出的概念感到困惑

Java:具有复合条件的for循环的异常行为