Python,遍历列表以执行搜索

时间:2014-06-25 14:04:58

标签: python

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

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

2 个答案:

答案 0 :(得分:2)

根据我的经验,此错误与无序收集垃圾有关。我在调试代码时看到过一次,其中有人用__del__方法写入文件。 (馊主意)。我确定您收到了错误,因为您正在关闭with:块内的文件,该块会为您执行openclose

答案 1 :(得分:1)

第二次运行时,split = keylineBMA.split()得到的结果比预期的要短。您尝试访问列表外的索引10。