2015-07-01 3 views
1

почему я получаю эту ошибку при попытке выполнить следующий кодошибка индекс вне диапазона питона

#!/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 линии и просто положить заявление на печать распечатать, что находится в xandy, он печатает каждую пару значений в массиве в порядке. Текстовый файл имеет этот

1 2 
3 4 
5 6 
7 8 

все, что я хочу, чтобы это сделать, это сохранить первый столбец в массиве х, а второй столбец в массиве у

+0

Почему вы раскалываете прочитанное на новой строке? '.read' будет автоматически читать строки по одному. Возможно, вы хотите сделать «.readlines»? –

+1

Какая ошибка вы получаете? Когда я запускаю код, я получаю 'x = [1, 3, 5, 7]' и 'y = [2, 4, 6, 8]' – Andy

+0

Я предполагаю (не уверен), что у вас пустая строка в нижней части файла. – NightShadeQueen

ответ

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) 
3

Открыть файл в редакторе, например Notepad ++ и убедитесь, что нет никаких посторонних линий в начале или в конце файла, который вы читаете.

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) 

Другой быстрый мысль: убедитесь, что текстовый файл не имеет пустых строк в конце. Возможно, добавьте также проверку if line:.

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. Для этого примера не требовалось.

Смежные вопросы