2016-08-09 124 views
2

我想編寫讀取* .csv文件並使用pandas庫解析它的類。我想知道我應該在哪裏初始化df。讀取文件內容的類

#!/usr/bin/env python 
import pandas as pd 
import os 

class ParseDataBase(object): 
     def __init__(self, name_file): 
       self.name_file = name_file 

     def read_file(self): 
       """Read the file concent""" 

       try: 
         self.df = pd.read_csv(self.name_file) 
       except IndexError: 
         print ("Error: Wrong file name") 
         sys.exit(2) 
       return self.df 

     def dispaly_file(self): 
       print self.df 

def main(): 
     x = ParseDataBase('something.csv') 
     x.dispaly_file() 

if __name__ == '__main__': 
     main() 

上述代碼返回以下錯誤:'ParseDataBase' object has no attribute 'df'

我不想傳遞許多變量,同時裝箱對象。

我是新來的面向對象編程,所以任何意見和提示都非常感謝!

+1

什麼是'self.df'?這個錯誤很明顯,Python不知道'self.df'是 – Li357

回答

1

您還沒有分配self.df,除非你運行read_file(),你不是。

def main(): 
    x = ParseDataBase('something.csv') 
    x.read_file()  
    x.dispaly_file() 
1

將屬性df分配到read_file方法中。您正試圖在該屬性存在之前訪問該屬性。

我應該這樣做:

#!/usr/bin/env python 
import pandas as pd 
import os 

class ParseDataBase(object): 
     def __init__(self, name_file): 
       self.name_file = name_file 
       # Change I made to initiate in the init method. 
       self.df = self.read_file() 

     def read_file(self): 
       """Read the file concent""" 

       try: 
         self.df = pd.read_csv(self.name_file) 
       except IndexError: 
         print ("Error: Wrong file name") 
         sys.exit(2) 
       return self.df 

     def dispaly_file(self): 
       print self.df 

def main(): 
     x = ParseDataBase('something.csv') 
     x.dispaly_file() 

if __name__ == '__main__': 
     main() 
+0

謝謝!這說得通。我還有一個問題。看來我的異常錯誤是錯誤的(除了IndexError :)。我怎麼會在我的問題中產生錯誤?我收到錯誤:'文件something.csv不存在' – Monica

+0

什麼是完整的錯誤?我認爲這是IOError。所以'IOError'除外。 – piRSquared

+0

是的,這是!非常感謝你的幫助! – Monica