通过 Python 将数据添加到 CSV 文件

Ste*_*hen 3 python csv

我有一个函数可以将新数据添加到 csv 文件中。我已经有点工作了。但是,我遇到了一些问题。

\n\n
    \n
  1. 当我添加新值时(name, phone, address, birthday),它将它们全部添加到一列中,而不是同一行中的单独列。(不太清楚如何将它们分成不同的列......)
  2. \n
  3. 我只能添加数字而不是字符串值。所以如果我写add_friend(blah, 31, 12, 45),它会返回说blah未定义。但是,如果我写add_friend(3,4,5,6),它会将其添加到新行 \xe2\x80\x94but 中,添加到单个列中
  4. \n
  5. 该函数的目标是:如果您尝试添加一个已经在 csv 中的朋友(例如 Bob),并且他的地址、电话、生日已经在 csv 中,则add_friend(Bob, address, phone, birthday)应该声明False,而不是添加它。但是,我不知道如何做到这一点。有任何想法吗?
  6. \n
\n\n

这是我的代码:

\n\n
def add_friend (name, phone, address, birthday):\n    with open('friends.csv', 'ab') as f:\n       newrow = [name, phone, address, birthday]\n       friendwriter = csv.writer(open('friends.csv', 'ab'), delimiter=' ',\n                                   quotechar='|', quoting=csv.QUOTE_MINIMAL)\n      friendwriter.writerow(newrow)\n      #friendreader = csv.reader(open('friends.csv', 'rb'), delimiter=' ', quotechar='|')\n      #for row in friendreader:\n        #print ' '.join(row)\n\n     print newrow\n
Run Code Online (Sandbox Code Playgroud)\n

dec*_*iar 5

根据您的要求以及您似乎想要做的事情,我编写了以下内容。它应该足够详细以便可以理解。

读取 CSV 文件时,您需要与分隔符和其他属性保持一致。

另外,尝试移动"friends.csv"到全局,或者至少在一些非硬编码常量中。

import csv

def print_friends():
    reader = csv.reader(open("friends.csv", "rb"), delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        print row

def friend_exists(friend):
    reader = csv.reader(open("friends.csv", "rb"), delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in reader:
        if (row == friend):
            return True
    return False

def add_friend(name, phone, address, birthday):
    friend = [name, phone, address, birthday]
    if friend_exists(friend):
        return False

    writer = csv.writer(open("friends.csv", "ab"), delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(friend)
    return True

print "print_friends: "
print_friends()

print "get_friend: "
test_friend = ["barney", "4321 9876", "New York", "2000"]
print friend_exists(test_friend)

print "add_friend: "
print add_friend("barney", "4321 9876", "New York", "2000")
Run Code Online (Sandbox Code Playgroud)