覆盖数据列表:获取文件及其列表,并将该列表写入CSV文件

时间:2013-04-09 12:23:45

标签: python

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

1 个答案:

答案 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.jointuple转换为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