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

不使用pandas写入CSV时单元格排布异常问题求解

问题原因

csv.writerows() 要求传入的参数是二维可迭代对象:最外层的每个元素对应CSV的一行,行元素内的每个子元素对应该行的一个单元格。
你传入的j1_list是一维字符串列表,而Python中字符串本身属于可迭代对象,因此writerows()会自动把每个字符串拆成单个字符,每个字符单独占一行、放入独立单元格,最终就出现了你看到的数字拆分问题。
之前用writerow(j1_list)时,是把整个j1_list当作单行内容写入,所以所有值都会挤在同一行,不符合按列排布的需求。

修复方案

要实现每个数值单独占一行、按列排布的效果,只需要把每个数值包装成单元素列表再传给writerows(),或者直接循环调用writerow()写入单个值即可。
另外你现有代码还存在几个可修正的问题:

  • 重复遍历7次目录、编写7个逻辑完全一致的读取方法,冗余度过高
  • 类中定义的方法未加静态方法装饰器,调用逻辑不规范
  • 打开CSV文件写入时未加newline=''参数,Windows环境下会自动插入多余空行
  • 路径拼接直接用字符串格式化容易出现转义错误,推荐用os.path.join处理

修正后的写入代码

import csv
import os

# 数据读取完成后,写入部分替换为以下逻辑
with open('C:/Users/DunningJ3/Desktop/sample.csv', 'w', newline='', encoding='utf-8') as wf:
    writer = csv.writer(wf)
    # 单列表按单列写入
    for value in j1_list:
        writer.writerow([value])
    
    # 如果需要同时写入j1-j7共7列数据,用zip按行对齐即可
    # for row in zip(j1_list, j2_list, j3_list, j4_list, j5_list, j6_list, j7_list):
    #     writer.writerow(row)

代码优化参考

可以把重复的读取逻辑合并,无需多次遍历目录、重复编写方法:

def read_target_value(filepath, line_idx, val_start=5, val_end=16):
    with open(filepath, 'r', encoding='utf-8') as f:
        lines = f.readlines()
        return lines[line_idx][val_start:val_end]

if __name__ == "__main__":
    # 配置要读取的行号与对应存储列表
    read_task = [
        (46, j1_list := []),
        (47, j2_list := []),
        (48, j3_list := []),
        (48, j4_list := []),
        (49, j5_list := []),
        (50, j6_list := []),
        (51, j7_list := [])
    ]
    # 仅遍历一次目标目录
    for file in os.listdir(path):
        if file.endswith(".ls"):
            file_path = os.path.join(path, file)
            for line_num, res_list in read_task:
                res_list.append(read_target_value(file_path, line_num))
    
    # 后续接CSV写入逻辑即可

注:原代码中j3、j4均读取索引为48的行,如果是笔误可自行调整对应行号。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:33:39