我正在尝试从json写入csv,因此每个值(pH)在不同的行中,但是我一直在获取
回溯(最近通话最近):
中的文件“ C:/Users/User/PycharmProjects/Meslosana/getValues.py”,第22行 线[i] [1] = pH
IndexError:列表索引超出范围
我还将在同一行但不同列中添加不同的值。
我的csv文件如下所示,它没有空行。
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0
每次运行代码时,它都会在底部创建一个空行。
这是我的代码
import json
import csv
file = 'LaukiGeojson/Zemdegas.geojson'
cord = []
with open(file) as f:
data = json.load(f)
i = 1
for feature in data['features']:
cord = feature['geometry']['coordinates'][0]
pH = feature['properties']['pH']
print(pH)
print(feature)
print(data)
# saglabaa
r = csv.reader(open('LaukiAnalizes/Zemdegas.csv'))
lines = list(r)
print(len(lines))
#lines[i][0] = 1
lines[i][1] = pH
#lines[i][2] = 1
#lines[i][3] = 1
#lines[i][4] = 1
i += 1
writer = csv.writer(open('LaukiAnalizes/Zemdegas.csv', 'w', newline=''))
writer.writerows(lines)
# saglabaa
r = csv.reader(open('LaukiAnalizes/Zemdegas.csv'))
lines = list(r)
lines[0][0] = 'ID'
lines[0][1] = 'pH'
lines[0][2] = 'P'
lines[0][3] = 'K'
lines[0][4] = 'Mg'
writer = csv.writer(open('LaukiAnalizes/Zemdegas.csv', 'w', newline=''))
writer.writerows(lines)
open('LaukiAnalizes/Zemdegas.csv').close()
答案 0 :(得分:1)
我将避免盲目地假设CSV文件具有给定行数的代码。更好:
检查当前行是否甚至存在于CSV中,是否确实更新了pH
值,否则添加新行。
import json
import csv
GEOJSON_FILE = 'LaukiGeojson/Zemdegas.geojson'
CSV_FILE = 'LaukiAnalizes/Zemdegas.csv'
with open(GEOJSON_FILE, encoding='utf8') as f:
geo_data = json.load(f)
with open(CSV_FILE, encoding='utf8', newline='') as f:
reader = csv.reader(f, delimiter=',')
lines = list(reader)
for i, feature in enumerate(geo_data['features']):
pH = feature['properties']['pH']
if i < len(lines):
lines[i][1] = pH
else:
lines.append([1, pH, 1, 1, 1])
with open(CSV_FILE, 'w', encoding='utf8', newline='') as f:
writer = csv.writer(f, delimiter=',')
writer.writerows(lines)
您打开和关闭CSV文件的次数对我来说似乎很混乱。读一次,写一次。另外,对于所有文件交互,请使用上下文管理器(with open(...) as ...)
。
答案 1 :(得分:0)
Python的索引为0。这意味着第一行的索引为0,最后一个元素的索引为length-1。这是您收到错误的地方,因为当i = 9时,这将尝试访问不存在的行。通过在开始时设置i=0
而不是i=1
来解决此问题。