2013-04-09 114 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

相關問題