2014-09-24 96 views
0

这是我的代码的简化版本。基本上我有一个通用格式的文件:当我迭代文件时忽略第二个for循环

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循环中,它就可以工作。

+0

[为什么我不能在打开的文件上调用read()两次?](http://stackoverflow.com/questions/3906137/why-cant-i-call-read-twice-on-一打开文件) – jonrsharpe 2014-09-24 07:36:37

回答

0

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

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

仅由第二for循环之前加入

file.seek(0) 

,指针移动回文件的开头,让您从一开始就再次读取该文件。