Python 使用str.split后处理数据

Python 使用str.split后处理数据,python,python-3.x,Python,Python 3.x,我像这样解析.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(

我像这样解析
.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_文件中 时间=cols[4] 索引器:列表索引超出范围 make:[全部]错误1

我使用的数据:

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

您得到一个索引器,因为
cols
中没有五个元素。也许文件中有空行

还请注意,从文件中获取行最好使用:

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

if 'SecId' in line:
    continue

如果看不到数据,很难说

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

foo、bar、baz、qux

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

顺便说一下,我强烈建议您使用模块分析文件

使用
len(cols)
检查。此外,您的输入数据表明
time\u 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)

您正在解析的文件是什么样子的?问题可能是cols不是一个5元素列表。@MatthewAdams我认为每行有5列以上。正如我提到的,我可以打印出第五列,也就是1345013468…@jujuju:no,至少有一列没有。添加一个
print(cols)
以查看错误消息前的故障行。[胡乱猜测:也许在结尾有一个额外的换行?]@DSM问题已经解决。莱恩(科尔斯)11岁。我忘了开始一条新的线路,这使它们看起来像很多“1”。你介意提供更多的信息吗?原始数据格式为csv。我需要在任何地方修改程序吗?是的,您应该创建一个
csv.reader
对象来解析文件。按照我所包含的链接中的示例进行操作。我认为如果“SecId”不在第行中,则会是
对于这种情况,我正在替换
如果重新搜索(“SecId”,第行):
我已经添加了数据。我认为每行有5列以上。正如我所提到的,我可以打印出第五列,即13450、13468…对,但我的意思是说
如果垃圾邮件:继续;否则:
只是一种奇怪的说法,如果不是垃圾邮件:@wim:我只愿意改变这么多。