Python中字符串列表存入CSV文件时字符被拆分的问题求助
解决Python列表存入CSV时字符被拆分的问题
嘿,这个坑我之前也踩过!太懂这种明明代码看起来没问题,但CSV里的内容全拆成单个字符的崩溃感了😆
问题根源
你遇到的情况,核心原因是csv模块的writerow()方法会把传入的可迭代对象的每个元素拆成单独的CSV列。而字符串本身就是字符的可迭代对象,所以当你直接把单个动物名称(比如"dog")传给writerow()时,它会把'd'、'o'、'g'分别当成不同的单元格写入,就出现了你看到的d,o,g这种情况。
错误代码示例(你可能不小心写成这样了)
import csv animals = ["dog", "cat", "lion"] with open("animals.csv", "w", newline="") as f: writer = csv.writer(f) for animal in animals: writer.writerow(animal) # 这里是问题所在:直接传字符串,被拆成单个字符
正确的写法
根据你的需求,有两种常用的正确方式:
方式1:每个动物单独占一行(每行一个单元格)
把单个动物名称放进一个列表里再传给writerow(),这样writerow()就会把整个列表当成一行,里面的单个元素作为一个单元格:
import csv animals = ["dog", "cat", "lion"] with open("animals.csv", "w", newline="") as f: writer = csv.writer(f) for animal in animals: writer.writerow([animal]) # 用列表包裹单个元素,避免拆分
方式2:所有动物在同一行(每个动物一个单元格)
如果想把整个列表的动物放在同一行的不同单元格里,直接把整个列表传给writerow()就行:
import csv animals = ["dog", "cat", "lion"] with open("animals.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(animals) # 直接传入整个列表,每个元素对应一个单元格
方式3:一次性写入所有行(更简洁)
用writerows()方法,传入一个包含多个子列表的列表,每个子列表对应一行:
import csv animals = ["dog", "cat", "lion"] with open("animals.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerows([[animal] for animal in animals]) # 生成每行一个元素的列表集合
内容的提问来源于stack exchange,提问作者user7621299
相关产品推荐
相关产品推荐

