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

Python如何覆盖或删除CSV文件行:用另一CSV行随机替换指定行

问题原因说明
  • csv.writer.writerow() 方法仅接受1个可迭代对象作为输入(代表单行数据),你传入row和riga两个参数属于用法错误,会直接抛出参数数量异常。
  • CSV是流式文本格式,不支持局部修改中间行内容。你用r+模式打开文件后先读取了全部内容,文件指针已移动到末尾,此时写入只会在文件尾部追加内容,无法覆盖已有行。
  • 直接对原文件读写容易出现内容损坏,更稳妥的方案是先把目标CSV的全量内容加载到内存修改,完成后再整体写回文件。
实现方案

方案1:随机覆盖目标行(推荐)

import csv
import random

# 先读取cache.csv的完整内容,保留表头
with open("cache.csv", "r") as f:
    cache_reader = csv.reader(f)
    cache_header = next(cache_reader)
    cache_rows = list(cache_reader)

# 读取size.csv内容
with open('/content/drive/MyDrive/Colab Notebooks/size.csv') as f:
    size_reader = csv.reader(f)
    for row in size_reader:
        # 保留你原有的判断逻辑
        if self.cache_max - self.observation < int(row[1]):
            # 过滤出和当前size行第一列不相等的cache行,和你原有逻辑对齐
            valid_rows = [r for r in cache_rows if r[0] != row[0]]
            if valid_rows:
                # 随机选一个要替换的行的索引
                replace_idx = random.randint(0, len(cache_rows)-1)
                # 覆盖对应行
                cache_rows[replace_idx] = row
                # 如果你每行只需要替换一次,处理完可以加break,按需调整

# 修改完成后把全量内容写回cache.csv
with open("cache.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(cache_header)
    writer.writerows(cache_rows)

方案2:删除随机行后追加到末尾

如果不需要保留原cache的行数位置,可以用更简单的实现:

import csv
import random

with open("cache.csv", "r") as f:
    cache_reader = csv.reader(f)
    cache_header = next(cache_reader)
    cache_rows = list(cache_reader)

with open('/content/drive/MyDrive/Colab Notebooks/size.csv') as f:
    size_reader = csv.reader(f)
    for row in size_reader:
        if self.cache_max - self.observation < int(row[1]):
            valid_rows = [r for r in cache_rows if r[0] != row[0]]
            if valid_rows:
                # 随机删除一行
                del_idx = random.randint(0, len(cache_rows)-1)
                del cache_rows[del_idx]
                # 新行追加到末尾
                cache_rows.append(row)

# 写回文件
with open("cache.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(cache_header)
    writer.writerows(cache_rows)
注意事项
  • 写入CSV时加newline=""参数是Python处理CSV的规范写法,可以避免Windows环境下出现多余空行。
  • 代码中保留了你原有的compare_row[0] != row[0]的过滤逻辑,如果不需要可以直接删除valid_rows的判断。
  • 如果要处理多次替换逻辑,注意控制替换次数,避免出现重复替换同一行的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:57:03