2013-02-19 258 views
0

我想打開兩個文件。第一個(大師)是這樣的:更多嵌套循環python

ABC0001 \t rest \t of \t line 
ABC0002 \t rest \t of \t line 
ABC0003 \t rest \t of \t line 
... 

所有的「\ t」的是文件在實際的標籤和有每個項目編號後的其他信息。

下一個文件(allp)只是有項目編號,但會被擴展:

ABC0001 
ABC0001.25 
ABC0001.56 
ABC0001.35 
ABC0002 
ABC0002.43 
ABC0002.97 
... 

到目前爲止我的代碼:

masters = open("masters.txt","r") 
allp = open("allp.txt","r") 

for line in masters: 
    tabloc = line.find("\t") 
    product = line[:tabloc] 
    info = line[tabloc:] 
    for line_2 in allp: 
    if product in line_2: 
     print 1 
    else: 
     print 0 

我的輸出爲全0。我有一些愚蠢的嘗試,並試圖重置ABCXXXX的「產品」。如果我在嵌套循環之前打印出產品,它是正確的,但是如果我在嵌套循環中打印它,它會多次打印第一個產品,然後每隔一個打印一次就是ABCXXXX。

我確定我的邏輯可以簡化,但沒有必要,我也不能真正想到如何去做,因爲我對python還是比較新的。

我需要的是從「主人」列表中獲取主要產品,並在「allp」列表中查找其所有子產品。我需要使用其主產品中的信息打印每個子產品。

+0

你需要什麼輸出? – ATOzTOA 2013-02-19 18:30:49

+0

對不起...我很難解析你想看到代碼輸出的內容。你能否編輯你的文章,並更具體? – mgilson 2013-02-19 18:31:03

+0

對不起。增加了我想要做的事情。 :-) – rjbogz 2013-02-19 18:35:53

回答

1

你會想

allp = open("allp.txt","r").readlines() 

,因爲你在一個循環中做

for line_2 in allp: 

,所有第一後,後續的迭代將是空白。

編輯
作爲mgilson指出,allp.seek(0)在每次迭代的結尾也做了,尤其是對於大型文件的好方法。

+0

謝謝!這工作很好! – rjbogz 2013-02-19 18:40:44

+0

沒問題。在那之前,非常令人沮喪:-) – Hoopdady 2013-02-19 18:41:24

+1

或者,您可以'allp.seek(0)'重置文件對象,以便您可以重新遍歷它。如果你的文件是**巨大**可能會更好 - 如果它們合理大小,它並不重要。 – mgilson 2013-02-19 18:46:21