You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:36:04