Python中将元组写入CSV文件时元素被拆分的原因及解决方法
问题原因与解决方法
这问题我之前也踩过坑!其实是csv.writerows()的工作逻辑导致的——它接收的参数应该是多行数据的集合,其中每一行都得是一个可迭代对象(比如列表、元组),用来表示这一行的多列内容。
你传入的test元组里,每个元素是字符串,而字符串本身就是可迭代的(会被自动拆成单个字符)。所以writerows()会把每个字符串当成「一行有多列」来处理,自然就把每个字符用逗号分隔开了。
解决办法
有两种简单的方式可以修复这个问题:
方法1:把每个元素包装成单元素序列
修改传入writerows()的数据,把每个字符串放在一个单元素的元组或列表里,这样csv.writer就会把整个字符串当成一行的唯一一列,不会拆分字符。
修改后的代码如下:
import csv import platform if platform.system() == 'Windows': newline='' else: newline=None test = ("apple", "banana", "cherry") def write_list_to_file(output_file, lst): with open(output_file, 'w', newline=newline) as f: writer = csv.writer(f) # 将每个元素包装成单元素元组,避免被拆分 writer.writerows( [(item,) for item in lst] ) print("File created") write_list_to_file("test.csv", test)
方法2:循环调用writerow()
如果觉得列表推导式有点绕,也可以直接循环遍历你的元组,每次调用writerow()写入单个元素(同样要把元素放在单元素序列里):
import csv import platform if platform.system() == 'Windows': newline='' else: newline=None test = ("apple", "banana", "cherry") def write_list_to_file(output_file, lst): with open(output_file, 'w', newline=newline) as f: writer = csv.writer(f) for item in lst: # 每次写入一行,用单元素列表包裹元素 writer.writerow( [item] ) print("File created") write_list_to_file("test.csv", test)
两种方法最终都会输出你想要的结果:
apple banana cherry
内容的提问来源于stack exchange,提问作者Thor Christensen
相关产品推荐
相关产品推荐

