对python数组的访问会导致索引错误,但数组已填充
我的程序有问题。我想逐行读取一个文件,并将每一行拆分为字部分,然后将其保存到数组中。到现在为止,一直都还不错。 阅读很有效。拆分是有效的。数组已填充。但是,当我试图访问任何其他元素时,首先我会得到“IndexError:列表索引超出范围”。 当我打印整个arry时没有问题。然后显示每个元素 下面是代码:对python数组的访问会导致索引错误,但数组已填充,python,arrays,indexoutofrangeexception,Python,Arrays,Indexoutofrangeexception,我的程序有问题。我想逐行读取一个文件,并将每一行拆分为字部分,然后将其保存到数组中。到现在为止,一直都还不错。 阅读很有效。拆分是有效的。数组已填充。但是,当我试图访问任何其他元素时,首先我会得到“IndexError:列表索引超出范围”。 当我打印整个arry时没有问题。然后显示每个元素 下面是代码: zieldatei = open('c:\\datacrawler.txt','a') with open('c:\\Python35\\'+Dateiname,'r') as f: for
zieldatei = open('c:\\datacrawler.txt','a')
with open('c:\\Python35\\'+Dateiname,'r') as f:
for line in f:
analyser(line)
if 'SET NAME IS' in line:
break
def analyser (empfaenger):
strlaenge= len(empfaenger)
record = 'RECORD NAME IS'
stufennummer2 = empfaenger.split()
#print(stufennummer2) <------------this is possible
print(stufennummer2[1]) <-------------this makes problems
stufennummer = stufennummer2[1]<-------this makes problems
typ1 = 'type is binary'
typ2 = 'pic x'
if stufennummer == '01' :
feldname = empfaenger.split()[2]
strlaenge2 = len(feldname)
strlaenge3 = str(strlaenge2)
zieldatei.write(' 77 FN-ST-TAG PIC X('+strlaenge3+')name+'".\n')
zieldatei=open('c:\\datacrawler.txt','a')
以open('c:\\Python35\\'+Dateiname,'r')作为f:
对于f中的行:
分析仪(线路)
如果行中的“集合名称为”:
打破
def分析仪(empfaenger):
strlaenge=len(empfainger)
记录='记录名称为'
stufennummer2=empfaenger.split()
#打印(stufennummer2)这是打印(stufennummer2)输出的一部分。这是一个很大的洞来显示的东西:
['R', '*--ROCHADE-GENERIERUNG--*:', 'AM', '06.12.12', 'UM', '08:22:49']
['R', '01', 'IK25-UPD-COUNT', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-STATUS', 'PIC', 'X(01).']
['R', '01', 'IK25-KTO-ART', 'PIC', 'X(01).']
['R', '01', 'IK25-KTO-ORDN-BEGR', 'PIC', 'X(20).']
['R', '01', 'IK25-PN-LFD-NR', 'TYPE', 'IS', 'BINARY', '15.']
['R', '01', 'IK25-PN-ABRUF-PER-DATUM', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-FUELLBYTE', 'PIC', 'X(01).']
['R', '01', 'IK25-MUSTER-ART', 'PIC', 'X(01).']
['R', '01', 'IK25-MST-ERST-TM-KEY', 'TYPE', 'IS', 'DECIMAL', '18,0.']
['R', '01', 'IK25-MUSTER-GUELTIG-VON', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-PN-ABRUF-VERARB-DATUM', 'TYPE', 'IS', 'BINARY', '31.']
['R', '01', 'IK25-PN-BETRAG', 'TYPE', 'IS', 'DECIMAL', '9,2.']
['R', '01', 'IK25-PN-CTV-PRODUKT-MM', 'PIC', 'X(01).']
['R', '01', 'IK25-PN-ABRUF-BETRAG', 'TYPE', 'IS', 'DECIMAL', '9,2.']
['/']
要跳过太短的行(这显然是您的问题),您可以如下更改代码:
def analyser (empfaenger):
strlaenge= len(empfaenger)
record = 'RECORD NAME IS'
stufennummer2 = empfaenger.split()
if len(stufennummer2) < 2:
print('Line too short')
return
def分析仪(empfaenger):
strlaenge=len(empfainger)
记录='记录名称为'
stufennummer2=empfaenger.split()
如果len(stufennummer2)<2:
打印('行太短')
回来
如果值不存在,则无法读取该值。跳过太短的行
这是一种方式。添加以下行:
def analyser (empfaenger):
strlaenge= len(empfaenger)
record = 'RECORD NAME IS'
stufennummer2 = empfaenger.split()
if len(stufennummer2) < 2:
return
# your code here
def分析仪(empfaenger):
strlaenge=len(empfainger)
记录='记录名称为'
stufennummer2=empfaenger.split()
如果len(stufennummer2)<2:
回来
#你的代码在这里
请记住,python列表索引从0开始,为什么不向我们展示打印(stufennummer2)
打印的内容以及打印(stufennummer2[1])
产生的异常?剩下的就不相关了。print(stufennumer2)用行中的元素打印每个数组。print(stufennummer2[1])为我提供了一个IDEXERR,当我试图访问数组的特定元素时,程序会中断。请显示print(stufennummer2)的输出。最后一个数组仅作为一个元素,因此stufennummer2[1]将在那里失败。