2016-03-13 78 views
1

我是編碼和學習python的新手。我一直在試圖創建一個程序,詢問用戶有關某個零件的信息,然後將其附加到一個文件中。一旦它附加了文件,我應該能夠看到文件中的信息,如果我打開它。但是,該程序不會將信息保存在文件上。我可能會犯一個愚蠢的錯誤,但我一直無法弄清楚,因爲我對編碼完全陌生。無法在數據幀行中附加csv文件

import sys 
import pandas as pd 

colnames = ['name', 'numid', 'length', 'height'] 
parts_info = pd.read_csv('part.info', sep ='\t', header = None, names = colnames, index_col = 'name') 

New_parts = {} 

class Part: 
    name = "" 
    numid = 0 
    height = 0 
    length = 0 

    def display(self): 
     print '' 
     print 'Part Information:' 
     print parts_info 

    def get(self): 
     self.name = raw_input('Enter Part Name: ') 
     self.numid = int(raw_input('Enter NumId: ')) 
     self.height = float(raw_input('Enter Height (in feet): ')) 
     self.length = int(raw_input('Enter Length: ')) 

    def new_part(self): 
     New_parts[self.name] = {'numid':self.numid, 'height':self.height, 'length':self.length} 

    def save(self): 
     with open('part.info','a') as f: 
      parts_info.to_csv(f, header = False) 
     f.close() 

onePart = None 

if len(sys.argv) > 1 and sys.argv[1] == 'READ': 
    onePart = Part() 
else: 
    onePart = Part() 
    onePart.get() 
    onePart.new_part() 
    onePart.save() 

New_df = pd.DataFrame.from_dict(New_parts,orient='index') 
New_df.index.name = 'name' 

parts_info = parts_info.append(New_df) 
onePart.display() 
+0

歡迎來到堆棧溢出! – tmthydvnprt

回答

0

代碼更正和評論

有幾件事情:

  1. 你並不需要定義的列名,使用pd.read_csv的時候,他們會從基於csv推斷在default header= argument。另外index_col=應該是int。當.save()被稱爲沒有數據已追加到數據幀還可以用

    parts_info = pd.read_csv('part.info', sep ='\t', index_col=0) 
    
  2. 讀入。把一些print聲明中,所以你可以看到流,像

    def save(self): 
        print 'saving', parts_info 
        with open('part.info','a') as f: 
         parts_info.to_csv(f, header = False) 
    

    print 'make new part' 
    onePart = Part() 
    print 'get new part info' 
    onePart.get() 
    print 'add to log' 
    onePart.new_part() 
    print 'save it to csv' 
    onePart.save() 
    

    您需要調整您的代碼,這樣的東西,你想讓他們的順序發生。

  3. 當您使用

    with open('/path/to/file', 'a') as f: 
    

    你不需要

    f.close() 
    

    best practicewith句話背後。