2017-05-04 72 views
2

這是我用Python編寫的第一個函數,所以我確信有很多不正確的東西。我試圖在作者的文件名和作者,標題的每一行的格式的書的標題讀入格式的詞典:將文件輸入到字典中?

{0: [" The Hitchhiker's Guide To The Galaxy", 'Douglas Adams' ] } 

隨着關鍵遞增爲每條線下閱讀。這是我最好的嘗試,我一直無法運行。你有什麼建議嗎?我只是返回第0個值來檢查函數是否正常工作。

def read_books(file_name): 
    data={} 
    try: 
     with open(file_name, "r") as fh: 
      for line in fh: 
       try: 
        (auth, title) = line.split('','') 
        for i in lines: 
         data[i]=[title.strip(), auth.strip()] 
       except: 
        continue 

     return data[0] 

    except: 
     return -1 

print(read_books(books.txt)) 
+0

您的代碼縮進嚴重(至少在SO),所以在當前狀態下,幫你會很辛苦。 –

+0

你能解釋一下它可能會更好嗎? – Scotchnowplease

+0

您不應該使用這樣的'except'子句,因爲它們會捕獲所有**異常,即使是您可能需要查看的異常,如「SyntaxError」。具體而言,或者至少在調試時將其忽略掉。 – martineau

回答

0

你實際上是在正確的軌道上。您可以使用enumerate()在迭代文件時獲取當前的索引/行號。

這裏是你的循環更新版本:

def read_books(file_name): 
    data = {} 
    with open(file_name, "r") as f: 
     for line_number, line in enumerate(f): 
      try: 
       auth, title = line.split(",") 
       data[line_number] = [title.strip(), auth.strip()] 
      except ValueError: 
       continue 
    return data 
+0

光禿禿的'嘗試/除外'吮吸。特別是在那裏它沒有理由被捉住。 –

+0

實際上它不是,特別是在這種情況下,因爲'.split()'可能會在分隔線錯誤或文件中可能存在空行的情況下拋出'ValueError'。 – ozgur

+0

哦,沒錯。在那種情況下,我更願意在開箱之前測試物品的數量。或者對這個例外更具體。 –