我有一个函数,可以将新数据添加到csv文件中。我有点用了。但是,我有一些问题。
(name, phone, address, birthday)
时,它将它们全部添加到一列中,而不是在同一行中单独添加列。(不太清楚如何将它们分成不同的列…)add_friend(blah, 31, 12, 45)
,它会返回说blah
没有定义。但是,如果我写add_friend(3,4,5,6)
,它将把它添加到新行中,但是,在一个列中add_friend(Bob, address, phone, birthday)
,它应该声明False
,而不是添加它。但是,我不知道怎么做。有什么想法吗?这是我的代码:
def add_friend (name, phone, address, birthday):
with open('friends.csv', 'ab') as f:
newrow = [name, phone, address, birthday]
friendwriter = csv.writer(open('friends.csv', 'ab'), delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
friendwriter.writerow(newrow)
#friendreader = csv.reader(open('friends.csv', 'rb'), delimiter=' ', quotechar='|')
#for row in friendreader:
#print ' '.join(row)
print newrow
你并没有说明你对Python的经验,所以我的目标是稍微低一点-无意冒犯
你的家庭作业有几个“要求”。一般来说,您应该确保一个函数做一件事。因此,为了满足您的所有需求,您需要几个函数;请至少创建一个模块(即,包含函数的文件)。
空格分隔符和引号的
|
是非常不寻常的。对于当前文件,列之间的Delimeter是什么?什么是用来引用/转义文本的?(所谓“转义文本”,我的意思是:如果我有一个csv文件使用逗号作为列分隔符,我想把一个带逗号的句子放在一个列中,我需要区分表示“新列”的逗号和作为列中句子一部分的逗号之间的区别。微软决定Excel支持双引号,因此"hello, sailor"
成为事实上的标准。如果您想知道
"bob brown”
是否已经在文件中,则需要先读取整个文件,然后再尝试插入。您可以使用'r'
,然后使用'w'
。但你应该每次想插入一条记录时都阅读整个文件吗?如果你有100条记录要添加,你应该每次都读取整个文件吗?在添加过程中是否有存储名称的方法?blah
不是字符串。它需要被引用为字符串文本("blah"
)。blah
只是指一个名为blah
的变量。如果它说blah
没有定义,那是因为您没有声明变量blah
来保存任何内容。|
是引用字符。blah
不是字符串文本,"blah"
是。blah
不带引号是一个变量引用,此处不存在该变量。'r'
),然后使用csv.reader将其转换为行迭代器并查找所有名称。您可以将这些名称添加到集合中,然后在之后永远与该集合核对。回复3:
要获取此集合,可以将函数定义为:
然后如果你把集合分配到某个地方,例如
existing_people = get_people()
然后,您可以在添加新人员时检查它,如下所示:根据你的要求,以及你似乎想做的事情,我写了以下几点。它应该足够冗长,可以理解。
读取CSV文件时,需要与分隔符和其他属性保持一致。
另外,尝试将
"friends.csv"
移动到全局,或者至少在某些非硬编码常量中移动。相关问题 更多 >
编程相关推荐