【发布时间】:2015-08-26 13:17:14
【问题描述】:
您好,我在搜索具有多个序列号的大文件时遇到 KeyError。当我搜索文件并输入在文件中出现两次的序列号时,就会出现此问题。我想搜索这个文本文件并打印出我需要的序列号或用户输入。
这是错误:
if item[param] != correct:
KeyError: 'APN'
这是我正在搜索的文件的文本示例:
500,SHOWALL
APN=" "
APU=" "
APP=" "
IPD="127.0.0.1"
DSP=1710
IPU="127.0.0.1"
VWD="2"
600,SHOWALL
APN=""
APU=" "
APP=" "
IPD="127.0.0.1"
DSP=1710
IPU="127.0.0.1"
VWD="2"
700,SHOWALL
APN=" "
APU=" "
APP=" "
IPD="127.0.0.1"
DSP=1710
IPU="127.0.0.1"
VWD="2"
500,SHOWALL
APN=""
APU=" "
APP=" "
IPD="127.0.0.1"
DSP=1710
IPU="127.0.0.1"
VWD="2"
由于 500 在文件中出现两次,它会遇到 KeyError。
这是我的代码示例:
def process(infile, outfile, keywords):
keys = [[k[0], k[1], 0] for k in keywords ]
endk = None
with open(infile, "rb") as fdin:
with open(outfile, "ab") as fdout:
fdout.write("<" + words + ">" + "\n")
for line in fdin:
if endk is not None:
fdout.write(line)
if line.find(endk) >= 0:
fdout.write("\n")
endk = None
else:
for k in keys:
index = line.find(k[0])
if index >= 0:
fdout.write(line[index + len(k[0]):].lstrip())
endk = k[1]
k[2] += 1
if endk is not None:
raise Exception(endk + " not found before end of file")
return keys
这是我用于输入文件、输出文件和搜索文件的关键字的定义过程。这是代码的输出部分:
while (count < (len(setNames))):
for number, item in enumerate(lst, 0):
print setNames[count]
for param, correct in correct_parameters.items():
if item[param] != correct:
print('{} = {} which is incorrect'.format(param, item[param]))
with open(compareResults, "ab") as fdout:
fdout.write('{}'.format(setNames[count]) + " " + '{} = {} which is incorrect'.format(param, item[param])+ '\n')
count += 1
如果序列号出现两次或更多,我的目标是如何让程序输出两次结果。因此,即使500 在我的文本文件中出现两次或更多次。我仍然希望它打印正确的所有 500 个结果。
这是我完整代码的链接。我没有发布完整的内容,因为它非常复杂,需要先清理一下。
如果需要更多信息,我会在下面发布。
【问题讨论】:
标签: python string search keyerror