2014-06-25 80 views
0

我希望有人能指出我出错的地方。我正在寻找迭代“mylist”列表以获取第一个条目并将该第一个条目用作搜索字符串,然后执行搜索并在找到该字符串后收集特定信息并将其发布到Excel工作表中。然后我希望迭代到下一个“mylist”条目并执行另一个搜索。第一次迭代执行正常,但环路我得到以下CMD窗口错误的第二次迭代...Python,遍历列表来执行搜索

2014 Apr 25 09:43:42.080 INFORMATION FOR A 

14.01 
Traceback (most recent call last): 
File "C:\TEST.py", line 362, in <module> 
duta() 
File "C:\TEST.py", line 128, in duta 
if split[10] == 'A': 
IndexError: list index out of range 
Exception RuntimeError: RuntimeError('sys.meta_path must be a list of 
import hooks',) in <bound method Workbook.__del__ of 
<xlsxwriter.workbook.Workbook object at 0x0238C310>> ignored 

这里是我的代码...

for root, subFolders, files in chain.from_iterable(os.walk(path) for path in paths): 
     for filename in files: 
      if filename.endswith('.txt'): 

       with open(os.path.join(root, filename), 'r') as fBMA: 

        searchlinesBMA = fBMA.readlines() 
        fBMA.close() 

        row_numBMAA+=1 

        num = 1 
        b = 1 
        print len(mylist) 
        print (mylist[num]) 
        while b<len(mylist): 
         for i, line in enumerate(searchlinesBMA): 
          for word in [mylist[num]]: 
           if word in line: 
            keylineBMA = searchlinesBMA[i-2] 
            Rline = searchlinesBMA[i+10] 
            Rline = re.sub('[()]', '', Rline) 
            valueR = Rline.split() 
            split = keylineBMA.split() 
            if split[6] == 'A': 
             print keylineBMA 
             print valueR[3] 
             worksheetFILTERA.write(row_numBMAA,3,valueR[3], decimal_format) 

             row_numBMAA+=1 
             break 

         num+=1 
         b=+1 

任何想法,我我做错了吗?我的循环是否偏离了位置,还是我没有输入正确的列表指针?

感谢, MikG

+0

不'关闭'用'with'打开的文件只是向左缩进,它会自动关闭。为什么使用'num'和'b',它们看起来就像是一样的东西。 – cmd

回答

1

在第二轮,你比你预计的短结果得到split = keylineBMA.split()。您尝试访问列表之外的索引10。

+0

嗨,mabac,道歉,这个例子的索引应该是[6],为了这个问题的目的,我缩短了输出字符串(来自我的原始文件)。修改了上面的示例代码。 – MikG

2

根据我的经验,这个错误与垃圾收集失序有关。我在调试代码的时候看到了一次,其中有人正在使用__del__方法写入文件。 (馊主意)。我很肯定你会得到这个错误,因为你正在关闭with:块中的文件,它为你做了openclose