覆盖数据列表:取一个文件及其列表并将该列表写入一个CSV文件
问题描述:
我想取一个好名字及其列表并将其替换为另一个CSV文件,或者用它自己替换csv文件,用相同的内容。
功能COMAND应该是save_friends( 'data.csv',load_friends( 'data.csv'))覆盖数据列表:取一个文件及其列表并将该列表写入一个CSV文件
def save_friends(friend_info, new_list):
with open(friend_info, 'w') as f:
for line in new_list:
f.write(line + '\n')
这个功能我得到这个错误类型错误:只能拼接元组(而不是 “STR”)到元组
所以我加了v.append(tuple(line))
以上f.write(line + '\n')
,它基本上覆盖了空数据文件。我如何获得此功能?
答
在我看来,new_list
是一个包含元组对象的迭代器。因此,你不能用str
串连它:
>>> ("foo","bar") + "\n"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "str") to tuple
的典型方法是str.join
的tuple
成str
你尝试用"\n"
来连接它。例如:
>>> ','.join(("foo","bar")) + "\n"
'foo,bar\n'
所以将其应用于你的代码给我们留下了:
def save_friends(friend_info, new_list):
with open(friend_info, 'w') as f:
for line in new_list:
f.write(','.join(line) + '\n')
根据什么的line
的元素,你可能需要再前进一步,以确保在每一个元素元组也是一个str
:
f.write(','.join(str(x) for x in line) + '\n')
,因为如果遇到join
元件,其不是字符串,它抱怨:
>>> ','.join((1,2,3))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
是的,你是对的new_list是一个包含元组的迭代。和f.write(','。join(line)+'\ n')可以创造奇迹,谢谢。 – 2013-04-09 12:33:18