2011-08-30 60 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

他说,在没有对数据做任何事情的情况下加载和解析文件是没有意义的。如果你想要做的只是打印那里的内容,可以改变函数名称。 –