2013-02-19 129 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