2013-04-09 116 views
0

我想取一个好名字及其列表并将其替换为另一个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'),它基本上覆盖了空数据文件。我如何获得此功能?

回答

1

在我看来,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.jointuplestr你尝试用"\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 
+0

是的,你是对的new_list是一个包含元组的迭代。和f.write(','。join(line)+'\ n')可以创造奇迹,谢谢。 – 2013-04-09 12:33:18

相关问题