如何用Python写入CSV文件并添加列?解决字符拆分问题
问题分析与解决方案
问题根源
你遇到的字符串被拆分成单个字符的问题,是因为csv.writer.writerow()方法会把传入的可迭代对象的每个元素当成一列。字符串本身是字符的可迭代对象,直接传字符串的话,每个字符都会被拆成单独一列。另外你当前的代码是先批量写姓名、再写职位、最后写邮箱,会导致三列数据上下错开,无法对应同一人的信息。
修复步骤
要实现三列对应同一人信息,需要把三个列表中索引相同的元素打包成一行再写入CSV:
- 打开文件时添加
newline='',避免Windows系统下生成的CSV出现多余空行(csv模块官方推荐写法) - 先写入表头,明确每列含义
- 使用
zip()把三个列表的对应元素打包成元组,循环写入每一行
修改后的完整代码(仅替换写入部分,其余爬虫代码保留)
# ... 前面的爬虫代码保持不变 ... with open('test.csv', 'w', newline='', encoding='utf-8') as csv_file: csv_writer = csv.writer(csv_file) # 写入表头 csv_writer.writerow(["姓名", "职位", "邮箱"]) # 打包三个列表的对应元素,逐行写入 for name, position, email in zip(name_lst, position_lst, email_lst): csv_writer.writerow([name, position, email])
额外说明
- 添加
encoding='utf-8'是为了避免中文乱码,确保CSV能正确显示中文姓名或职位 zip()会按最短的列表长度打包,如果三个列表长度不一致,超出部分会被忽略。你的爬虫逻辑里每个信息都是对应添加的,所以三个列表长度应该一致,无需额外处理
内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi
相关产品推荐
相关产品推荐

