2014-11-02 33 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 2014-11-02 20:50:09

+0

是你的file_read函數會返回值爲dcitionary? – Hackaholic 2014-11-02 20:51:10

+0

plz分享您的整個代碼? – Hackaholic 2014-11-02 20:52:51

回答

0

它看起來像file_read()正在讀取文件到一個字符串。

Then 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 2014-11-02 20:58:14

+0

你的問題是'for line in porfolio'在某個時間將'line'分配給_one個字符。改變,正如我在我的答案中所說的那樣。 – khelwood 2014-11-02 21:00:27

+0

它適用於portfolio.split('\ n')中的行。嘗試在for循環外使用該文件時出現新的錯誤,索引總是超出範圍。 @khelwood – adam 2014-11-02 21:15:25

0

得到它與此代碼的工作:

for line in minfil : 
    line = line.strip() 
    elements = line.split(",") 
    portfolio[str(elements[0])] = [(int(elements[1]),float(elements[2]), str(elements[3]))] 
相關問題