python - if 语句:“IndexError:列表索引超出范围”
问题描述
你好我有这个代码:
array = 0
with open('items.txt') as json_file:
data = json.load(json_file)
abre_arquivo1 = open("dict.txt","w")
for p in data['data']:
abre_arquivo1.write(str(p['order_id'])+ "\','")
abre_arquivo1.write(str(p['pedido_venda'])+ "\','")
abre_arquivo1.write(str(p['supplier_id'])+ "\','")
abre_arquivo1.write(str(p['created_at'])+ "\','")
abre_arquivo1.write(str(p['data_retorno_nf'])+ '\n')
for item in p:
abre_arquivo1.write(str(p['items'][array]['item'])+ "\','")
abre_arquivo1.write(str(p['items'][array]['mm_product_id'])+ "\','")
abre_arquivo1.write(str(p['items'][array]['mm_product_id'])+ "\','")
abre_arquivo1.write(str(p['items'][array]['description'])+ "\','")
array += 1
if array >= int(p['items'][array]['item']):
array = 0
else:
print(array)
next
当我尝试执行它时,此错误会在语句中显示“列表索引超出范围”If
,而不是更改array = 0
. 我在这里做错了什么?
文件里面items.txt
是一个json:
{"data":[{"order_id":74415,"pedido_venda":"Z92211","supplier_id":1042,"status":9,"priority":null,"created_at":"2014-09-22 00:00:00","approved_at":"2014-09-19 00:00:00","assistence":0,"items":[{"item":"0002","mm_product_id":"98610","sku":"BA1068 BR","description":"Bau Art in Moveis BA1068 BR Branco ","quantity":1,"unity":"UN","price_unity":72.86,"price_total":72.86,"cst":null},{"item":"0003","mm_product_id":"98616","sku":"BL1030FR","description":"Balcao para Forno Microondas Art in Moveis BL1030 FR Fresno ","quantity":1,"unity":"UN","price_unity":86.11,"price_total":86.11,"cst":null},{"item":"0004","mm_product_id":"98629","sku":"AR4000 BR","description":"Armario para lavanderia Art in Moveis AR4000 BR Branco ","quantity":1,"unity":"UN","price_unity":146.28,"price_total":146.28,"cst":null}],"data_retorno_nf":"2014-10-10","data_estimada_entrega_cd":"2014-10-15
00:00:00","prazo_para_faturamento":"2014-10-10","filial":[],"cliente":[{"bairro":" Jardim S\u00e3o Paulo(Zona Norte)","cep":"02040090","cidade":"S\u00e3o Paulo","cpfcnpj":"13549318820","email":"1042_artin@sandbox","endereco":"R Ag Gomes, 258, apto.92","ibge":"00000","ibgecompleto":"3500000","incricaoestadual":"ISENTO","nome":"SILVANA ANGELICA LOPES","telefone":"11- 36760352","tipocli":"F","tipocontrib":"F","uf":"SP"}],"transportadora":[]}
解决方案
您在这里不需要array
循环索引变量。只需直接使用 . 循环遍历列表即可for item in p['items']:
。
这将显着简化此类代码,因为您不必编写所有容易出错的array += 1
代码。
data = json.load('items.txt')['data']
with open('dict.txt', 'w') as fp:
for p in data:
fp.write("'{order_id}', '{pedido_venta}', '{supplier_id}'".format(**p))
for item in p['items']:
fp.write('{item}', '{mm_product_id}', '{description}'".format(**item))
根据需要调整格式字符串以获得预期的输出。
请注意,您的原始文件for item in p:
将遍历对象中的每个键p
,而不是遍历列表中的项目p['items']
。
推荐阅读
- jquery - 单击后关闭工具提示
- c - 缺少显式类型(假定为“int”)
- excel-formula - 条件位于相邻列中的 Excel 列总和
- lua - 你如何安装 Luarocks 中列出的依赖项?
- python - 在 joblib `Parallel` 上下文中腌制 `matlab` 对象时出错
- c - 将字符串解析为空终止数组的最佳方法是什么?
- powershell - 在多次迭代中重命名文件
- git - 为什么 git 在“git add”命令之间产生新的 blob?
- javascript - 检测用户何时在浏览器中执行 JavaScript
- kotlin - 如何使用 Kotlin 中的代码从 OnCreate 更改文本大小