索引错误超出范围python

时间:2015-07-01 14:04:51

标签: python arrays indexing

出于某种原因,我在尝试运行以下代码时遇到此错误

#!/usr/bin/python
import matplotlib.pyplot as plt
x = []
y = []
readFile = open('Out_0_0.txt','r')
sepFile = readFile.read().split('\n')
readFile.close()
for plotPair in sepFile:
    xandy = plotPair.split()
    x.append(int(xandy[0]))
    y.append(int(xandy[1]))
print x
print y

当我删除x.append和y.append行并只是放一个print语句来打印xandy中的内容时,它会打印出数组中的每对值。文本文件有这个

 1 2
 3 4
 5 6
 7 8

我想要它做的是将第一列存储在x数组中,将第二列存储在y数组中

4 个答案:

答案 0 :(得分:4)

问题在于你如何阅读文件。

这样可行。

x = []
y = []
with open('test.txt','r') as data_file:
    for plot_pair in data_file:
        xandy = plot_pair.split()
        x.append(int(xandy[0]))
        y.append(int(xandy[1]))
print(x)
print(y)

答案 1 :(得分:3)

在Notepad ++等编辑器中打开文件,确保您正在阅读的文件的开头或结尾没有多余的行。

答案 2 :(得分:3)

您可以更有效(且安全)地阅读此内容。我做的第一个更改是在阅读文件时使用with。这将在您完成后自动处理关闭文件。

接下来,我已删除split('\n'),因为它不是必需的。相反,我们将逐行循环遍历文件,然后将其拆分为空格。由于这是一个两列文件,我们将使用以下行来执行此操作:

fx,fy = line.split()

我在尝试中坚持这个/除非文件末尾有空行。这将生成ValueError,并假设这是文件的结尾。

然后我们将行的列追加到最后一个数组。

x = []
y = []
with open('test.txt') as f:
    for line in f:
        try:
            fx,fy = line.split()
        except ValueError:  
            break       
        x.append(int(fx))
        y.append(int(fy))

print x
print y

打印出来:

[1, 3, 5, 7]
[2, 4, 6, 8]

最后,我删除了matplotlib导入。这个例子并不需要。

答案 3 :(得分:1)

快速......应该有效(不完全测试:P)

x = []
y = []
with open(inputFile, 'r') as f:
    for line in f:
        nextX, nextY = map(int, line.split(' '))
        x.append(nextX)
        y.append(nextY)

另一个想法:确保txt文件末尾没有空行。也许也可以添加if line:支票。