Python中TXT转CSV拆分异常问题排查
问题分析与解决
你遇到的CSV格式异常问题,核心是对csv模块写入方法的输入格式要求理解偏差,再加上代码里的几个细节漏洞,我们一步步拆解修复:
错误点详解
表头写入逻辑错误
writer.writerow('title')中,你传入了一个字符串,但writerow要求接收可迭代的列集合(比如列表)。当传入字符串时,Python会把它当作字符的迭代器,每个字符都会被当成单独一列,导致title被拆成t,i,t,l,e。条目写入逻辑错误
writer.writerows(lines)里,lines是拆分得到的字符串列表。writerows会遍历每个元素,若元素是字符串,同样会被拆成单个字符作为列,这就是为什么每个名字会变成B,o,b,o, S,o,s,o,(b,o,b,o,s,o,s,o)。文件读取的覆盖问题
你的代码里for line in in_file: lines = line.split(', ')会每次循环覆盖lines变量,最终lines只会保留文件最后一行的拆分结果,前面的行都会被丢弃。
修正后的代码
import csv # 初始化列表存储所有拆分后的条目 all_items = [] with open('test1.txt', 'r') as in_file: for line in in_file: # 去除每行首尾空白(比如换行符),避免拆分出空字符串 stripped_line = line.strip() if stripped_line: # 跳过空行 items = stripped_line.split(', ') all_items.extend(items) with open('log.csv', 'w', newline='') as out_file: writer = csv.writer(out_file) # 表头传入列表,确保作为单列写入 writer.writerow(['Name']) # 每个条目包装成单元素列表,让每个条目占一行一列 writer.writerows([[item] for item in all_items])
额外优化说明
- 加入
newline=''是csv模块的官方推荐写法,能避免Windows系统下生成的CSV出现多余空行。 line.strip()和if stripped_line:用来处理文件中的空行和首尾空白,让代码更健壮。[[item] for item in all_items]通过列表推导式把每个字符串包装成单元素列表,确保writerows将每个条目作为完整的一行写入,不会拆分字符。
内容的提问来源于stack exchange,提问作者Saniii
相关产品推荐
相关产品推荐

