0

我解析.txt这样的:

def parse_file(src):
    for line in src.readlines():
        if re.search('SecId', line):
            continue
        else:
            cols = line.split(',')
            Time = cols[4]
            output_file.write('{}\n'.format(
                          Time))

我认为cols是我可以使用索引的列表。虽然它成功地打印出我想要的正确结果,但存在一个超出范围的错误:

文件“./tdseq.py”,第 37 行,在 parse_file Time = cols[4] IndexError: list index out of range make: * [all] Error 1

我使用的数据:

I10.FE,--,xx,xxxx,13450,tt,tt,tt,33,22,22:33:44
4

3 回答 3

2

没有看到数据,很难说。

可能的原因是您假设基于 1 的索引,当一行如下:

foo,bar,baz,qux

将被索引为列表中的位置 0,1,2,3。

顺便说一句,我强烈建议您使用csv模块解析您的文件。

于 2012-07-11T03:10:14.773 回答
0

您收到 IndexError 是因为cols其中没有五个元素。也许您的文件中有空行?

另请注意,最好从文件中获取行:

for line in src:

如果您正在搜索一个简单的字符串,则不需要正则表达式,这就足够了:

if 'SecId' in line:
    continue
于 2012-07-11T03:10:07.763 回答
0

使用len(cols)检查。您的输入数据也表明time_index=3不是4

from __future__ import print_function

def parse_file(input_file):
    time_index = 3
    for line in input_file:
        if 'SecId' not in line:
            cols = line.split(',')
            if len(cols) > time_index:
               time = cols[time_index]
               print(time, file=output_file)
于 2012-07-11T03:11:47.867 回答