0

我想取一个好的名称及其列表并将其替换为另一个 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: can only concatenate tuple (not "str") to tuple

所以我在v.append(tuple(line))上面添加了f.write(line + '\n'),它基本上用空数据覆盖了文件。我如何让这个功能工作?

4

1 回答 1

1

在我看来,这new_list是一个包含元组对象的可迭代对象。因此,您不能将其与 a 连接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尝试将其与. 例如:tuplestr "\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
于 2013-04-09T12:29:05.790 回答