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:我只愿意改变这么多。