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

如何逐行读取大CSV/TXT文件并计算后写入(附报错代码)

问题分析与修复方案

你的代码存在几个核心问题:

  • csv.reader默认分隔符不匹配:你的文件是多空格分隔,但csv.reader默认用逗号分割,导致读出来的行要么是整行一个元素,要么分割出大量空值。
  • row是元组不可修改:csv.reader返回的row是不可变元组,无法直接赋值修改,必须转成列表。
  • 字符串无法直接运算:读取到的数值是字符串类型,得先转成float才能做乘法,处理完再转回字符串。
  • 文件处理不规范:写入文件未用with语句,容易出现资源泄漏。

修正后的代码

def applymath(self):
    self.textEdit_2.setText("")
    # 用with同时管理输入输出文件,自动释放资源
    with open(self.path_name2[0], 'r') as f, open(self.savefile1[0], 'w') as g:
        # 指定空格为分隔符,并跳过开头空格,适配多空格分隔的场景
        reader = csv.reader(f, delimiter=' ', skipinitialspace=True)
        for row in reader:
            # 跳过原文件中的空行
            if not row:
                continue
            # 把不可变元组转成可修改的列表
            row_list = list(row)
            try:
                # 第三列索引为2(从0开始),转成float计算后转回字符串
                row_list[2] = str(float(row_list[2]) * -1)
            except (IndexError, ValueError):
                # 处理列数不足或非数值的异常,可根据需求调整逻辑
                continue
            # 把处理后的列用空格拼接成一行
            processed_line = ' '.join(row_list)
            # 更新文本框
            self.textEdit_2.append(processed_line)
            # 写入输出文件,添加换行符
            g.write(processed_line + '\n')

关键细节说明

  • 分隔符配置:delimiter=' ', skipinitialspace=True确保多空格分隔的内容能被正确拆分列。
  • 元组转列表:通过list(row)将不可变元组转为可修改的列表,支持后续数值修改。
  • 数值类型转换:必须把字符串转成float才能执行乘法运算,处理完成后转回字符串方便拼接输出。
  • 异常防御:用try-except捕获列数不足、非数值的情况,避免程序意外崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:02