如何让Python生成的CSV文件中每个值单独存放于独立单元格
问题根源
你当前代码用tabulate的plain格式输出的内容是靠空格对齐分隔的,不符合CSV文件默认以逗号作为字段分隔符的规范,表格类软件打开时识别不到字段边界,自然会把整行所有内容放到同一个单元格里。
解决方案
方案1:用Python标准库csv模块生成(最推荐,兼容性最好)
不需要依赖第三方库,Python原生自带的csv模块会自动处理分隔符、特殊字符转义等问题,不会出现格式异常,Windows环境下写入时加上newline=''参数可以避免生成的文件多出空行。
import csv nestedlist = [["Point 1",0,5,0], ["Point 2",0,0,0], ["Point 3",5,0,0], ["Point 4",5,5,0],] with open('GCP.csv', 'w', newline='', encoding='utf-8') as f: csv_writer = csv.writer(f) # 写入表头 csv_writer.writerow(['n','x','y','z']) # 批量写入所有数据行 csv_writer.writerows(nestedlist)
如果需要生成兼容的txt文件,直接把文件名改为GCP.txt即可,CSV本身就是纯文本格式,两种格式完全兼容。
方案2:保留tabulate库的使用
如果习惯用tabulate的输出逻辑,不需要自己写写入逻辑,直接把tablefmt参数从plain改为csv即可,tabulate原生支持标准CSV格式输出:
from tabulate import tabulate nestedlist = [["Point 1",0,5,0], ["Point 2",0,0,0], ["Point 3",5,0,0], ["Point 4",5,5,0],] with open('GCP.csv', 'w', encoding='utf-8') as f: f.write(tabulate(nestedlist, headers=['n','x','y','z'], tablefmt="csv"))
补充说明:如果生成的文件用Excel打开还是出现同单元格问题,检查本地Excel的列表分隔符设置,部分非英文区域的Excel默认以分号作为字段分隔符,这种情况在csv.writer中加参数
delimiter=';'即可适配。
内容的提问来源于stack exchange,提问作者Abdul Hannan
相关产品推荐
相关产品推荐

