2013-03-30 2 views
0

У меня есть программа, которая нужно использовать что-то вроде этого:Странная ошибка «IndexError: list index out the range». Python

file1=open("cliente\\config.ini","r") 

print file1.read().split(",") 

user=file1.read().split(",")[0] 
passwd=file1.read().split(",")[1] 
domain=file1.read().split(",")[2] 
file1.close() 

В файле есть 3 строки, разделенные «» (пользователь, передать, домен).

Это выход:

['user', 'pass', 'domain'] 
Traceback (most recent call last): 
    File "C:\Users\default.default-PC\proyectoseclipse\dnsrat\prueba.py", line 8, in <module> 
    passwd=file1.read().split(",")[1] 
IndexError: list index out of range 

Я беру строки на 0, 1 и 2 в списке, так что я не беру тот, который не существует.

Итак, почему у меня ошибка?

спасибо.

+0

Не могли бы вы присвоить свой массив split переменной и получить доступ к этому напрямую, вместо того, чтобы каждый раз ссылаться на функцию split? – PsyKzz

ответ

3

Вы читаете информацию о конце файла. Когда вы вызываете read без аргументов, содержимое всего файла считывается, и указатель переходит к концу файла. Вы хотите, чтобы read один раз, и сохраните содержимое в переменной. Затем, доступ к индексам от:

file1 = open("cliente\\config.ini","r") 

line1 = file1.read().split(",") 

user = line1[0] 
passwd = line1[1] 
domain = line1[2] 
file1.close() 
+0

Он также может 'file1.seek (0)', но это было бы бессмысленно. – jordanm

+0

Большое спасибо! Я не знал этого о вызове read(). – user1618465

+1

На самом деле 'read()' читает весь файл, а не одну строку. Просто в этом случае похоже, что в файле есть только одна строка. – BrenBarn

1

read() вернет то, что в файле. От the docs:

...which reads some quantity of data and returns it as a string. 

Если вы вызываете его там не будет ничего не осталось читать.

0

read() - это метод для получения данных из буфера чтения. И вы не можете получать данные из буфера более одного раза.

0
file1=open("cliente\\config.ini","r") 

data = file1.read().split(",") 

user=data[0] 
passwd=data[1] 
domain=data[2] 
file1.close() 

Ваша первая строка file.read() переместит курсор в конец файла после прочтения строки. Другой файл file.read() не будет читать файл снова, как вы ожидали. Вместо этого он будет считываться с конца курсора и будет возвращать пустую строку.