当我遍历文件时,忽略第二个for循环

时间:2014-09-24 06:48:23

标签: for-loop python-3.x dictionary

这是我的代码的简化版本。基本上我有一个通用格式的文件:

2 3 5
4 8 9
etc

对于n行,我必须将文件组织成字典。在此之前,我需要一个数据点之和,所以我先遍历文件以创建一个和,然后在第二个套件中再次遍历每一行,以创建一个嵌套的字典数据结构。但由于某种原因,第二套完全被忽略了。

这是一个简化版本,显然有些东西可以移动,但在真实文件中我确实需要两个独立的循环,因为其中一个值是基于文件中总和的百分比,只是完全在第一个for循环结束后定义。

file = open('file.txt', 'r')
dict = {}
for line in file:
    v1, v2, v3 = file.split(' ')
    sum += v1
for line in file:
    v1, v2, v3 = file.split(' ')
    key = v1
    subkey = v2
    ratio = v3/sum
    value = ratio
    dict[key] = [subkey],[value]
print(dict)

出于某种原因,这只是给出了

{}

这是采用字典的原始分配而忽略第二次迭代。如果我尝试在第二个套件中打印任何内容,例如v1,则会被忽略。如果我把它放在第一个for循环中,它就可以了。

1 个答案:

答案 0 :(得分:0)

您必须将文件处理程序“倒回”到文件的开头。

当您打开文件时,指针位于最开头。完成第一个for循环后,指针位于文件的末尾。在第二个for循环中,指针仍然在末尾,所以它什么都不做。

添加

file.seek(0)

在第二个for循环之前,指针移回文件的开头,允许您从头开始再次读取文件。