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

Python CSV数据转换问题:基于前后值的条件转换实现

问题解决:CSV数值条件转换(同时处理前后元素)

需求回顾

  • 转换规则:若CSV中某数值处于1-4区间,需对其前一个和后一个数值应用转换:
    • 目标数值为8-10 → 减2
    • 目标数值为5-7 → 减1
  • 示例:输入8,1,8 → 期望输出6,1,6(中间的1触发规则,前后的8均减2)

原代码问题

原逻辑仅实现了「前一个数值是1-4时修改当前数值」,未覆盖「当前数值是1-4时修改前后数值」的核心需求;且直接修改原字符串列表,可能导致后续迭代时使用已修改的值引发错误。

修改后的代码

import csv

input_filename = 'updated_zeros.csv'
output_filename = 'updated_zeros.csv'

# 读取CSV并转换为整数列表(避免字符串操作的冗余与修改冲突)
with open(input_filename, mode='r') as csv_file:
    csv_reader = csv.reader(csv_file)
    rows = []
    for row in csv_reader:
        int_row = []
        for val in row:
            # 处理空值,这里默认转为0,可根据实际需求调整
            int_row.append(int(val.strip()) if val.strip() else 0)
        rows.append(int_row)

# 应用转换规则
for row in rows:
    row_len = len(row)
    # 遍历每个元素的索引与值,定位触发规则的元素
    for idx, current_val in enumerate(row):
        if 1 <= current_val <= 4:
            # 处理前一个元素(需确保索引合法)
            if idx > 0:
                prev_val = row[idx-1]
                if 8 <= prev_val <= 10:
                    row[idx-1] = prev_val - 2
                elif 5 <= prev_val <= 7:
                    row[idx-1] = prev_val - 1
            # 处理后一个元素(需确保索引合法)
            if idx < row_len - 1:
                next_val = row[idx+1]
                if 8 <= next_val <= 10:
                    row[idx+1] = next_val - 2
                elif 5 <= next_val <= 7:
                    row[idx+1] = next_val - 1

# 将整数列表转回字符串并写入CSV
with open(output_filename, mode='w', newline='') as csv_file:
    csv_writer = csv.writer(csv_file)
    string_rows = [[str(val) for val in row] for row in rows]
    csv_writer.writerows(string_rows)

# 打印转换结果
with open(output_filename, "r") as file:
    for line in file:
        print(' '.join(line.strip().split(',')))

print(f'转换后的数据已保存到 {output_filename}')

关键修改说明

  1. 整数列表预处理:先将每行字符串转为整数,避免反复类型转换,同时防止迭代时修改原列表导致的逻辑冲突。
  2. 索引与值同步遍历:使用enumerate同时获取元素索引和值,精准定位需要修改的前后元素。
  3. 边界条件防护:通过idx > 0和idx < row_len -1判断,避免越界访问列表元素。
  4. 规则触发逻辑修正:改为当当前值处于1-4区间时,主动修改前后符合条件的数值,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:16:22