如何用Python的csv模块将嵌套列表以原始Python格式写入CSV文件?
如何用csv模块将嵌套列表以Python原始格式存入CSV文件
你之前的代码问题出在writerow(matrix)——csv模块的writerow会把传入列表的每个元素当作CSV的一列,所以你的三个子列表被分别处理成了三列,每个子列表转成字符串后被自动加上了引号,最终就出现了你看到的带引号的多列内容,而且缺少外层的方括号。
要实现将整个矩阵以[[1,2,3],[4,5,6],[7,8,9]]的格式存入文件,你需要把整个矩阵的字符串作为单个CSV单元格写入,同时通过csv模块的参数控制去掉多余的引号。
方法一:使用csv.QUOTE_NONE禁用引号
import csv matrix = [[1,2,3],[4,5,6],[7,8,9]] with open('matrix.txt', 'w', newline='') as f: # 禁用引号,避免字符串被包裹 writer = csv.writer(f, quoting=csv.QUOTE_NONE, escapechar='') # 将矩阵转成字符串,放到列表里作为单个元素传入writerow writer.writerow([str(matrix)])
运行这段代码后,文件里的内容就是:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
补充说明
你之前尝试直接转字符串写入出现“每个字符间插逗号”的问题,是因为你直接把str(matrix)传给了writerow——writerow会把字符串的每个字符当作独立的列元素,所以才会出现逗号分隔每个字符的情况。必须把字符串放到一个列表里([str(matrix)]),这样它才会被当作一个完整的单元格处理。
如果不需要严格遵循CSV格式(只是要存这个字符串),其实也可以不用csv模块,直接写入字符串:
matrix = [[1,2,3],[4,5,6],[7,8,9]] with open('matrix.txt', 'w') as f: f.write(str(matrix))
但既然你要求用csv模块,第一种方法就完全满足需求。
内容的提问来源于stack exchange,提问作者JCF
相关产品推荐
相关产品推荐

