将21位数字写入CSV文件出现字符间额外空格的问题
问题原因
csv.writer的writerow()方法要求传入的参数是由每列内容组成的可迭代对象(比如列表、元组)。当你直接传入字符串类型的数字时,Python会将字符串按单个字符拆分为序列,每个字符被识别为独立的一列。- 你初始化
csv.writer时指定了分隔符为空格delimiter=' ',CSV写入时会自动在每两列之间插入分隔符,最终就出现了单个字符之间全是空格的输出结果。 - 你的代码还存在两处显性错误:变量名拼写错误(定义变量为
numb,调用时误写为nib)、文件关闭操作f.close()位于函数外部,函数执行时不会触发关闭,会导致文件资源泄漏。
修复方案
根据你的使用场景可以选择两种修复方式:
方案1:直接写入文件(无多列需求时推荐)
如果你只是要每行存储一个21位数字,不需要额外列,不需要严格遵循CSV多列格式,可以直接操作文件写入,不需要引入csv模块:
import random def generate_numbers(n): # 使用with上下文管理器自动处理文件关闭,无需手动调用f.close() with open("data.csv", "a", encoding="utf-8") as f: for _ in range(n): numb = '0016' + str(random.randint(111111111111111, 999999999999999)) + '16' f.write(numb + '\n')
方案2:保留csv.writer(有多列扩展需求时推荐)
如果后续需要扩展多列内容,要保留csv模块的使用,只需要将待写入的字符串包装为单元素列表传入writerow(),同时调整分隔符为CSV默认的逗号即可:
import csv import random def generate_numbers(n): with open("data.csv", "a", newline='', encoding="utf-8") as f: # 标准CSV默认分隔符为逗号,不需要手动设置为空格 writer = csv.writer(f) for _ in range(n): numb = '0016' + str(random.randint(111111111111111, 999999999999999)) + '16' # 包装为单元素列表,writerow会识别为只有1列,不会拆分字符 writer.writerow([numb])
内容的提问来源于stack exchange,提问作者MtSet
相关产品推荐
相关产品推荐

