#!/usr/bin/python
import os,sys
from os import path
input = open('/home/XXXXXX/ERR001268_1', 'r').read().split('\n')
at = 1
for lines in range(0, len(input)):
line1 = input[lines]
line4 = input[lines+3]
num1 = line1.split(':')[4].split()[0]
num4 = line4.split(':')[4].split()[0]
print num1,num4
at += 1
但是我得到了错误:列表索引超出范围
这里有什么问题?
除了"at +=1"
之外,还有其他方法可以完成这个循环循环吗?
THX
答案 0 :(得分:2)
问题是lines
的最大值为len(input)-1
,但您line4
为lines + 3
。因此,当您在最后几行时,lines + 3
将大于列表的长度。
for lines in range(0, len(input)):
line1 = input[lines]
line4 = input[lines+3]
num1 = line1.split(':')[4].split()[0]
num4 = line4.split(':')[4].split()[0]
print num1,num4
答案 1 :(得分:1)
让我们说len(input) == 10
。 range(0, len(input))
迭代[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
。当行> 6,你试图访问input[lines+3
],它显然是一个IndexError,因为没有index[10]
,[11]
等。
如果line1.split(':')[4]
line1.count(":") < 4
,at
也会引发IndexError。
我不理解上一个break
部分,似乎没有做任何事情,但你可以使用input
语句轻松打破循环。
另外,命名变量input
是一个坏主意,因为它与内置range(0, len(input)) == range(len(input))
函数冲突。而且{{1}},所以0作为范围的第一个参数是不必要的。
答案 2 :(得分:0)
您似乎想要读取一个文件并从每3行获取一些信息。我会建议更简单的东西:
def get_num(line):
return line.split(':')[4].split()[0]
nums1 = [get_num(l) for l in open(fn, "r").readlines()]
nums2 = nums1[3:]
for i in range(len(nums2)):
print nums1[i],nums2[i]
最后3个数字的nums1将不会被写入。变量at在代码中没有任何作用。
答案 3 :(得分:0)
我遇到了类似的问题,这是我提出的解决方案:
tuple = (1,2,3)
dogs = [ ]
cats = [ ]
one_two = [ ]
cats.apend(tuple)
dogs.apend(tuple)
file.apend(one_two)
file.apend("/")
print file
print cats
print dogs
度过美好的一天。