Python CSV姓名拆分写入:解决输出带括号与逗号问题求助
问题分析与解决方案
问题根源
- 错误处理CSV读取结果:
csv.reader读取每一行返回的是列表对象(比如['Tom Holl']),你用str(i)把列表转成字符串后,会带上方括号和单引号(变成"['Tom Holl']"),拆分后这些符号会混入结果。 - writerow使用不当:
csv.writer.writerow()接收可迭代对象,如果你传入单个字符串(比如'Tom'),它会把字符串的每个字符当作单独列,导致输出出现逗号分隔每个字符的情况。
修正后的代码
import csv # 一次性打开输入输出文件,避免循环内重复IO操作 with open('random_first_names.txt', 'r', encoding='UTF-8') as f, \ open('edit_random_first_names.txt', 'w', encoding='UTF-8') as f1: reader = csv.reader(f, delimiter="\n") writer = csv.writer(f1, lineterminator="\n") for row in reader: # 取出列表中的唯一元素(整行姓名),同时去掉首尾空白 full_name = row[0].strip() # 按空格拆分姓名,split()自动处理多个空格的情况 name_parts = full_name.split() for part in name_parts: # 用列表包装单个字符串,确保整串作为一列写入 writer.writerow([part])
代码说明
- 直接取
row[0]获取整行姓名字符串,避免将列表转成带符号的字符串。 - 使用
split()(不带参数)拆分姓名,自动处理姓名中可能的多个空格,同时过滤空字符串。 - 将输出文件的打开操作放在循环外,减少IO开销;用
w模式覆盖写入(需要追加可改成a)。 - 写入时用
[part]把单个字符串包装成列表,确保writerow将其作为完整一列写入,不会拆分字符。
内容的提问来源于stack exchange,提问作者Santos
相关产品推荐
相关产品推荐

