2014-11-02 6 views
0

Моя программа должна принимать данные от пользователя и читать файл с именем ввода. Чтение файла сохраняется в словаре, называемом портфолио, и оттуда все, что мне нужно сделать, это сортировать каждую строку в портфолио в виде ключей и значений.Разделение строки из файла в разные списки

Вот мой код.

portfolio = {} 
portfolio = file_read() #Reads the file through a function 
if file_empty(portfolio) == True or None: #nevermind this, it works 
    print "The file was not found." 
else: 
    print "The file has successfully been loaded" 

for line in portfolio: 
    elements = line.strip().split(",") #separate lists by comma 
    print elements[0] #using this to check 
    print elements[1] #if it works at all 

Все это делает печать первой буквы в первой строке, которая является S. И, видимо, элементы [1], как предполагается, будет вторая буква, но индекс выходит за пределы диапазона, пожалуйста, просветите меня, что может быть неправильно.

спасибо.

+0

Почему вы используете одно и то же имя портфолио переменных для двух разных вещей ??? – Hackaholic

+0

заключается в том, что функция file_read будет возвращать значения как dcitionary ?? – Hackaholic

+0

PLZ поделиться своим кодом? – Hackaholic

ответ

0

Похоже, что file_read() читает файл в строке.

Затем for line in portfolio: выполняет итерацию через каждые символ в этой строке.

Тогда elements = line.strip().split(",") предоставит вам список, содержащий один символ, поэтому попытка получить elements[1] проходит по границам списка.

Если вы хотите, чтобы прочитать все содержимое файла в строку под названием portfolio, вы можете перебирать каждую линии в строке, используя

for line in porfolio.split('\n'): 
    ... 

Но более обычного путь переборе строк в файл будет

with open(filename,'r') as inputfile: 
    for line in inputfile: 
     .... 
+0

Как мне его не разбить на список, содержащий один символ? Я хочу, чтобы он все поймал перед запятыми. @khelwood – adam

+0

Ваша проблема заключается в том, что 'for line in porfolio' присваивает' line' одному герою за один раз_. Измените это, как я сказал в своем ответе. – khelwood

+0

Он отлично работал для строки в portfolio.split ('\ n'). Я получаю новую ошибку при попытке использовать файл за пределами цикла for, теперь индекс всегда выходит за пределы диапазона. @khelwood – adam

0

Понял работать с этим кодом:

for line in minfil : 
    line = line.strip() 
    elements = line.split(",") 
    portfolio[str(elements[0])] = [(int(elements[1]),float(elements[2]), str(elements[3]))] 
Смежные вопросы