我想获取一个好名字及其列表,并将其替换为另一个CSV文件,或者用自己替换csv文件,用相同的内容覆盖它。
函数命令应该是save_friends('data.csv',load_friends('data.csv'))
def save_friends(friend_info, new_list):
with open(friend_info, 'w') as f:
for line in new_list:
f.write(line + '\n')
使用此函数我得到此错误TypeError:只能将元组(不是“str”)连接到元组
所以我在v.append(tuple(line))
之上添加了f.write(line + '\n')
,它基本上用空数据覆盖了该文件。如何使此功能正常工作?
答案 0 :(得分: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.join
将tuple
转换为str
,之后尝试将其与"\n"
连接起来。 e.g:
>>> ','.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