2011-08-30 67 views
0

我遇到了一些我一直在做的python腳本的問題。整個腳本的想法是閱讀包含4個「朋友」的csv文檔。作爲他們的名字,地址,電話號碼和生日。現在,我已經寫出了一些代碼,但有一些問題。使用Python讀取,添加和保存CSV文件。

  1. 我有load_friends定義的代碼,但它似乎是代碼只是爲了打開csv,而不是在加載函數時打開csv。
  2. 我真的很努力地找到正確的教程來編寫代碼,在函數後添加一個新行到一個csv文件,add_friend(姓名,地址,ph值,生日),輸入,然後將它添加到CSV。

如果任何人都可以提供幫助,那將是非常感謝!

我的代碼:

def load_friends(): 
    """Loads the friends.csv file from disk 
    """ 
reader = csv.reader(open("friends.csv", "rb")) 
for row in reader: 
    print row 


def save_friends(): 
    print row 

def add_friend(): 
    """Writes a new entry to friends.csv via Python commands 
    """ 
    aCSVReader = csv.reader(open('friends.csv', 'rb'), delimiter=' ', quotechar='|') 
    for row in aCSVReader: 
     print ', '.join(row) 
+2

請在將來直接插入代碼。如果它很大,則插入相關部分並鏈接到整個項目。 – Mat

回答

1

CSV假設各行之間的換行符所以下面應該做的一切你需要的。

writer = csv.writer(open('friends.csv', 'ab')) 
.....  
def add_friend(name, address, ph_number, birthday): 
    """write a row to the friends.csv file 
    """ 
    writer.writerow([name, address, ph_number, birthday]) 
+0

我還建議你將open從這個文件移動到'external'(一個open_writer()函數?),因爲我敢肯定你會寫多條線 – KevinDTimm

+0

Kevin是什麼意思? Regards, Steve – Stephen

0

這裏有一些提示:

在下面的功能,你需要修復縮進......它在Python事項。不知道這是否是一個剪切&粘貼或什麼的神器,但它是一個簡單的修復。

def load_friends(): 
    """Loads the friends.csv file from disk 
    """ 
reader = csv.reader(open("friends.csv", "rb")) 
for row in reader: 
    print row 

add_friend(),要打開的文件進行讀取...你可能想與模式「AB」(附加二進制)打開它。如果以寫入模式('w')打開它,現有內容將被清除。除非你將所有的朋友都留在記憶中,並且每次都寫出來,否則這不會達到你的期望。

另外,你爲什麼要改變分隔符爲''?如果它是標準的CSV,這可能不是你想要的。

+0

如果以寫入模式('w')打開它,現有內容將被清除。這正是剛纔發生的事情。我正在運行Kevin的add_friend代碼。有什麼建議麼? – Stephen

+0

是的,將它改爲'a'。 –

+0

並考慮使用'with'打開你的文件,如果你基本上是添加一行的原子操作。它會自動關閉該塊末尾的文件。請參閱[this](http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects)。 –

0

load_friends打開csv,加載並將其內容轉儲到標準輸出。

add_friend做相同事情,我不明白你在做什麼。

一個更有用的版本可以是:

def load_friends(): 
    with open('friends.csv', 'rb') as f: 
     for name, phone, address, birthday in csv.reader(f, delimiter=' ', quotechar='|'): 
      # do something with name, phone, etc. 


def add_friend (name, phone, address, birthday): 
    with open('friends.csv', 'ab') as f: 
     newrow = [name, phone, address, birthday] 
     csv.writer(f, deliminter=' ', quotechar='|').writerow(newrow) 

add_friend行追加到文件 'friends.csv'(開口與模式 'A')的端部。

+0

感謝您輸入Makeroo!然而,我迷失在你用#寫的東西上,用名字,電話等做些什麼? – Stephen

+0

他說,在沒有對數據做任何事情的情況下加載和解析文件是沒有意義的。如果你想要做的只是打印那裏的內容,可以改變函數名稱。 –