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

Python中csv.writerow函数使用异常:写入文本文件后字符间出现空格

问题根源&解决方案

嘿,我来帮你理清这个问题!你看到的每个字符间的“空格”其实是你指定的制表符\t,之所以会出现这种情况,核心原因是:从config.ini里读出来的header_1和header_2是字符串,不是真正的Python列表。

举个例子,你读取到的header_1实际是一串文本:"['*****data*****']",而不是一个包含单个元素的列表。当你把这个字符串传给writerow()时,csv模块会把它当成可迭代对象,逐个遍历每个字符,然后用\t分隔每个字符写入文件——这就导致了每个字符之间都被制表符隔开,看起来像是有空格。

快速修复方案

我们需要把读取到的字符串转换成真正的列表,这里推荐用ast.literal_eval()来做,它能安全地把符合Python字面量格式的字符串转成对应的对象(比直接用eval()安全多了,不会执行恶意代码)。

修改后的代码如下:

import csv
import configparser
import ast  # 新增导入ast模块

# 读取配置文件
config = configparser.ConfigParser()
config.read(r'C:\data\FF\Desktop\Studio\cfg.ini')

# 将字符串格式的配置转成真正的列表
header_1 = ast.literal_eval(config['HEADERS']['headers_1'])
header_2 = ast.literal_eval(config['HEADERS']['headers_2'])

full_path = r'C:\data\FF\Desktop\Studio\New Text Document.txt'
with open(full_path, 'w') as output:
    writer = csv.writer(output, delimiter='\t')
    writer.writerow(header_1)
    writer.writerow(header_2)

更规范的配置写法(可选)

其实你的config.ini里的列表写法并不符合ini文件的标准规范,标准ini通常用逗号分隔值,这样处理起来更简单,也不容易出错。比如把cfg.ini改成这样:

[HEADERS]
headers_2 = VEHICLE,MODEL,DSG,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND
headers_1 = *****data*****

对应的代码转换也更简洁:

header_1 = [config['HEADERS']['headers_1']]  # 把单个值包装成列表,适配writerow的要求
header_2 = config['HEADERS']['headers_2'].split(',')

这样就不用依赖ast模块,代码也更符合ini文件的使用习惯~

内容的提问来源于stack exchange,提问作者Mediterráneo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:42:51