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

将JSON数据写入CSV时遇IndexError及空行问题求助

解决CSV索引越界与空行问题

我来帮你搞定这两个头疼的问题,先拆解下错误原因,再给你优化后的代码:

问题根源分析

1. IndexError: list index out of range

你的初始CSV有9行0,0,0,0,0,最后你把第1行(索引0)改成了表头,所以实际能用来填数据的只有索引1到8的8行。但你的循环里i从1开始递增,如果data['features']里的元素数量超过8,i就会跑到9,这时候lines[9]根本不存在,自然就触发索引越界了。

另外,你在循环里反复读取CSV文件,这不仅效率低,还可能因为中间的写入操作导致文件内容变化,让lines的长度变得不可控,进一步加剧索引问题。

2. CSV底部空行问题

虽然你加了newline='',但反复打开、写入文件的操作很容易引入额外空行;最后那句单独的open(...).close()完全是多余的,反而可能带来文件处理的异常。

修复方案与优化代码

我把你的代码重构了一下,一次性读取CSV到内存处理,最后再一次性写入,既解决索引问题,也能消除空行:

import json
import csv

# 读取JSON数据
json_file = 'LaukiGeojson/Zemdegas.geojson'
with open(json_file) as f:
    geo_data = json.load(f)

# 一次性读取CSV内容到内存,避免反复IO操作
csv_path = 'LaukiAnalizes/Zemdegas.csv'
with open(csv_path, 'r', newline='') as f:
    csv_reader = csv.reader(f)
    csv_lines = list(csv_reader)

# 检查features数量是否超过CSV可用数据行(留第一行做表头)
max_available_rows = len(csv_lines) - 1
total_features = len(geo_data['features'])

if total_features > max_available_rows:
    print(f"⚠️ 警告:features数量({total_features})超过CSV可用数据行数({max_available_rows}),将只处理前{max_available_rows}条数据")

# 填充pH值(从第2行开始,对应索引1)
for idx in range(min(total_features, max_available_rows)):
    current_feature = geo_data['features'][idx]
    ph_value = current_feature['properties']['pH']
    csv_lines[idx + 1][1] = ph_value  # idx+1对应数据行,1对应pH列
    
    # 后续添加其他值的话,直接在这里扩展即可:
    # csv_lines[idx + 1][2] = current_feature['properties']['P']
    # csv_lines[idx + 1][3] = current_feature['properties']['K']
    # csv_lines[idx + 1][4] = current_feature['properties']['Mg']

# 设置表头
csv_lines[0] = ['ID', 'pH', 'P', 'K', 'Mg']

# 一次性写入所有修改,确保文件正确处理
with open(csv_path, 'w', newline='') as f:
    csv_writer = csv.writer(f)
    csv_writer.writerows(csv_lines)

关键优化点

  1. 用with语句管理文件:自动帮你处理文件打开/关闭,避免资源泄漏和异常。
  2. 一次性读写CSV:把所有操作放在内存里完成,减少IO次数,避免中间文件状态变化的问题。
  3. 添加数据量检查:提前警告你当features数量超过CSV可用行数的情况,从根源避免索引越界。
  4. 清晰的索引逻辑:用idx + 1对应数据行(跳过表头行),确保不会超出列表范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:42:49