2017-10-07 51 views
1

我是python的新手,不太喜歡面向對象的編程。我試圖找出最好的方式來實現以下目標:如何使用Python方法和實例從文件中存儲數據到字典中?

我想讀這樣的文件:

Name,semester,point 
abc,5,3.5 
cba,2,3.5 

我想將其存儲在像一本字典:從文件 INPUT名稱作爲主鍵以及與其相關的另外兩個值。 中,

輸出可能:

abc:'5','3.5' 

我需要用我的存儲值在其他功能上的一些計算。所以只要我存儲它們並以某種方式訪問​​它們就沒有問題。它可以是列表,數組列表,字典或任何似乎是一個很好的解決方案。

從我讀到的,我想使用方法和實例,而不是類和對象。我認爲這聽起來對我所理解的是正確的。

請提出實現此目的的最佳方法,因爲我已經檢查過類似問題的stackoverflow,並且我只找到了面向對象(我想避免)的解決方案。

+0

您已經說過應該做什麼,將它們存儲在字典中,我建議您閱讀字典中的一些教程以瞭解如何使用它們。 – Arman

+1

使用csv.DictReader。它會提供一個現成的字典。我不會爲這件事而煩惱。讓對象包裝字典尤其沒有意義。 –

+0

@Arman你可以推薦一些教程來解釋如何使用方法和實例。我遇到的每件事都是非常面向對象的,我現在還沒有準備好進入。 – PhoenixGirl

回答

0

我已經通過上文@Ajax1234使用的示例。看起來像一個很好的解決方案和例子。

從我瞭解的混亂是實例和類及其關係的方法

方法之間:

  • 連接到一個類,屬性的功能是一個方法。

類:

  • 他們作爲實例創建者工廠。
  • 它們的屬性提供=行爲數據和函數
  • 這些屬性由從這些類生成的實例繼承。

實例:

  • 這些代表在程序的域的具體項目。
  • 他們從他們的類繼承他們的屬性
  • 他們的屬性記錄不同的對象的數據。
  • 一次只能在內存中給定Method的一個實例。

例如,在一個數據處理模式:程序和記錄

  • 實例是像記錄
  • 類是一樣的軟件處理這些數據記錄

類,方法和實例用例說明:

糾正我,如果我錯誤地解釋這一點。

import sys 


    filename = sys.argv[1] 

    class Data: # class 
     def __init__(self, filename): 
      self.data = {} #will store data in empty dictionary 
      self.filename = filename 

     # funtion in class as attribute can be a METHOD 
     def get_data(self): 
      return [i.strip('\n').split(',') for i in open(filename)] 

     # funtion in class as attribute can be a METHOD 
     def set_data(self): 
      for i in self.get_data(): 
       self.data[i[0]] = i[1:] 

    # Instances are derived from Class 
    # file_data is an Instance created from the class Data 
    file_data = Data(filename) 

    # method called through Instance 
    file_data.set_data() 

    # will print the full dictionary 
    print(file_data.data) 

參考:Python入門馬克盧茨

希望這可以解釋它。

1

我不認爲你需要創建這個類,因爲其結果可能在一個行來實現:

Python3解決方案:

data = {a:b for a, *b in [i.strip('\n').split(',') for i in open('filename.txt')][1:]} 

Python2解決方案:

data = {a[0]:a[1:] for a in [i.strip('\n').split(',') for i in open('filename.txt')][1:]} 

但是,如果您正在尋找OO解決方案:

class Data: 
    def __init__(self, filename): 
     self.data = {} #will store data in empty dictionary 
     self.filename = filename 
    def set_data(self): 
     for i in self.get_data(): 
      self.data[i[0]] = i[1:] 
    def get_data(self): 
     return [i.strip('\n').split(',') for i in open(filename)] 
file_data = Data("the_file.txt") 
file_data.set_data() 
print(file_data.data) #will print the full dictionary 
+0

我不確定,但是您不需要關閉文件?也許使用'with'?我認爲用'line'替換'i'會更具可讀性。雖然很好的答案。 – Neo

+0

@Neo'with'可以使用;然而,默認情況下'open'會自動關閉文件,如果它只被打開閱讀。 – Ajax1234

0

一行溶液:

print({tuple(i[:1]):i[1:] for i in [i.strip().split(',') for i in open('g.txt')][1:]}) 
Detailed solution: 

final_dict = {}

with open("g.txt") as f: 
    for i in [i.strip().split(',') for i in f][1:]: 

      final_dict[tuple(i[:1])]=i[1:] 

print(final_dict) 
相關問題