如何解决列表索引超出范围'

时间:2015-05-06 11:04:39

标签: python

我一直试图找出这个错误,但我不能。我试图使用变量从文本文件中逐行读取代码,以便在需要时可以到达特定行。

Classroom = input("What classrooms results do you want to see? classone, classtwo or classthree?")
Class = open(Classroom +".txt", "r")
lineno = 0
name = Class.readlines()[lineno]
print(name)
lineno += 1

a = Class.readlines()[lineno]
print(a)
lineno += 1

b = Class.readlines()[lineno]
print(b)
lineno += 1

c = Class.readlines()[lineno]
print(c)
lineno += 1

这是文本文件:

Patrick
6
6
7
James
7
7
7
Tom
5
9
8
Florence
4
9
3
Hannah
2
2
1

如何解决错误?

4 个答案:

答案 0 :(得分:2)

readlines会读到文件的末尾。第二次通话不会给你任何数据。

无需使用readlines。只需遍历文件本身。

with open(classroom + '.txt') as classdata:
    for line in classdata:
        print(line)

您可能需要阅读readlines considered silly

输入文件的布局不明确。来自其他用户的编辑可能错误也可能没有错误。我假设以下

Patrick 6 6 7 
James 7 7 7 
Tom 5 9 8

如果要在空白处拆分每一行,只需使用split并打印各个元素。

with open(classroom + '.txt') as classdata:
    for line in classdata:
        for value in line.split():
            print(line)

答案 1 :(得分:0)

Classroom = input("What classrooms results do you want to see? classone, classtwo or classthree?")
with open(Classroom +".txt", "r") as f:
    for line in f.readlines():
        print line

尽量不要使用像class这样的关键字(虽然你已经使用了Class)。

答案 2 :(得分:0)

首先,数据文件不是最容易被解析的顺序,并且不需要为每个教室分别创建文件。只需将教室名称作为一列包含在一个数据文件中。让测试每列排成一行。我更喜欢使用,或者在我的csv文件中,因为我几乎没有在现实世界中看到空格分隔的文件。

class,student,a,b,c
one,Patrick,6,6,7
one,James,7,7,7
one,Tom,5,9,8
one,Florence,4,9,3
one,Hannah,2,2,1

好了,我们现在有一个规范化的csv文件,让我们使用csv模块来解析它。

import csv
results = []
with open("classone.txt", "r") as classroom:
    reader = csv.DictReader(classroom, delimiter=',')
    col = reader.fieldnames
    reader.next()
    for row in reader:
        results.append([row['class'], row['student'], row['a'], row['b'], row['c']])

现在数据已加载到列表中,并且您在col变量中有每个内部列表的标题。现在这绝对不是获取数据的最佳方式(对于使用pandas库的大型数据集),但是对于快速和脏访问,您可以这样做。

classroom = input("What classrooms results do you want to see? one, two or three?")
for row in results:
    if row[col.index('class')] == classroom:
        print row

然后你可以使用col.index()调用中的diff col名称来访问你需要的各种数据。

答案 3 :(得分:-1)

不要使用readlines(),因为当它们在数组中时很难分开。而是使用循环函数并使用read()单独读取每一行。使用:

Classroom = input("What classrooms results do you want to see? classone, classtwo or classthree?")
Class = open(Classroom +".txt", "r")
for x in range(len(Class.readlines())):
    name = Class.read()
    print(name)