我试图将数据集分析为不同长度的列表。我正在逐个调用我的数据集的行(行)以供我的函数分析。我希望无论列表的长度如何,该函数仍然可以正常运行。
我的代码:
f = open('DataSet.txt')
for line in iter(f):
remove_blanks = ['']
entries = line.split()
''.join([i for i in entries if i not in remove_blanks])
trash = (entries[0], entries[1])
time = int(entries[2])
column = [int(v) for v in entries[3:]]
def myFun():
print(entries)
print_string = ''
if column[0] == 100:
if column[1] >= 250 and column[2] == 300:
if len(column) >= 9:
digit = [chr(x) for x in column[4:9]]
print_string = ('code: ' + ''.join(str(digit[l]) for l in range(5)) + ' ')
if len(column) >= 13:
optional_digit = [chr(d) for d in column[9:13]]
for m in range(0, 4):
print_string += 'Optional Field: ' + optional_digit[m] + ''
else:
print_string += 'No Optional Field '
pass
pass
print(print_string)
print('')
myFun()
f.close()
发生的事情是,如果我的数据行的长度不够长(即列表以column[6]
结尾),我会收到错误:
line 17, in function
print('Code: ' + digit[l])
IndexError: list index out of range
我希望它仍然可以打印Code: #number #number #number #number
,并在打印时将任何不存在的列保留为空白,以便一行可以打印为Code: ABC9
,下一行打印为Code: AB
有不同的列表长度。
请帮忙! :)
答案 0 :(得分:1)
好吧,请确保您没有在列表上循环超过可用时间:
print_string = 'code: ' + ''.join(str(digit[l]) for l in range(min(5, len(digit)))) + ' '
或更好:
print_string = "code {} ".format("".join(str(dig) for dig in digit[:5]))
虽然我有一种感觉,但你过度复杂了。