2017-10-13 41 views
0

我試圖在python中創建測驗,並且需要從外部文本文件中檢索多個問題。 我設法成功檢索第一個問題,但是當我嘗試檢索第二個問題時,出現「列表索引超出範圍」錯誤。IndexError:從文件中檢索文本時列出索引超出範圍

這是我現在的代碼片段的樣子。

if choice1 == "CH": 
     choice2 = input ("Would you like to do the easy, medium or hard questions ?").lower() 
     if choice2 == "easy": 
      load_profile = open("chemistryquiz.txt","r") 
      question1 = load_profile.read().splitlines()[4] 
      print (question1) 
      question2 = load_profile.read().splitlines()[5] 
      print (question2) 

如果我註釋掉有關問題2的任何內容,程序工作得很好。我哪裏出錯了? P.S,我檢查了文本文件,並確保該行的編號是5,我知道你在python編程時從0開始計數。

而且,這些都是chemistryquiz.txt的內容

Chemistry Quiz : 

Easy : 

1) What is the chemical symbol of Carbon ? A: C B: Ca 
2) What is the weight of an electron ? A: 0 B: 0.1 
+0

你能分享'chemistryquiz.txt'的內容嗎? – Bahrom

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 我們應該能夠將發佈的代碼粘貼到文本文件中,並重現您描述的問題。 – Prune

+0

@OSG我建議你將它編輯成問題(也許替換咒語?),相應地添加新行。 – Bahrom

回答

1

問題是您要撥打load_profile.read()多次。每次您調用此函數時,它都會從之前的任何文件讀取功能中斷處開始讀取。但第一次調用讀取整個文件,所以第二次調用沒有剩下可讀的內容。它返回一個空字符串,並且splitlines()返回一個空列表。

只需閱讀一次該文件。

lines = load_profile.read().splitlines() 
question1 = lines[4] 
question2 = lines[5] 
2

讓我們一步步通過這個:

load_profile = open("chemistryquiz.txt","r") 

的文件是打開;並且你有一個文件句柄load_profile。 文件書籤位於文件的開頭。

question1 = load_profile.read().splitlines()[4] 

您已經閱讀整個文件,它拆分成線,並指派了5日線問題1

print (question1) 
question2 = load_profile.read().splitlines()[5] 

由於書籤是依舊在文件的結尾,閱讀()只返回EOF。 分界線沒有任何用處。沒有元素5. KABOOM!


回到閱讀文本的文字。例如...

with open("chemistryquiz.txt","r") as load_profile: 
    for input_line in load_profile: 
     # This loop will give you the file, one line at a time.