(简单,但奇怪)问题循环通过一个大的JSON数据文件JS,Python [重复]

vm0i2vca  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(91)

此问题在此处已有答案

Looping through array and removing items, without breaking for loop(18个答案)
2天前关闭。

上下文

你好,我有一个JSON文件,其中包含类似于以下内容的对象列表:

[{
"Codigo":"01",
"Descricao":"Animais vivos.",
"Data_Inicio":"01/04/2022",
"Data_Fim":"31/12/9999",
"Tipo_Ato":"Res Camex",
"Numero_Ato":"272",
"Ano_Ato":"2021"
},
{
"Codigo":"0102.31",
"Descricao":"-- Reprodutores de raça pura",
"Data_Inicio":"01/04/2022",
"Data_Fim":"31/12/9999",
"Tipo_Ato":"Res Camex",
"Numero_Ato":"272",
"Ano_Ato":"2021"
}, .....]

字符串
上面的列表有15075个对象。我正在编写一个脚本,检查“Codigo”是否有超过6个字符,如果是,它将弹出列表。

问题

我尝试使用JavaScript和python来实现它,在两种语言中都遇到了同样的问题。

  • JavaScript*
for(var i= 0; i <Nomenclaturas.length; i++){
   if(Nomenclaturas[i].Codigo.length>6){
      Nomenclaturas.splice(i,1)
   }
}
console.log(Nomenclaturas.length)
//result = 8180


JavaScript中的代码不能完成它的工作,因为我的列表中Codigo.length>6的一些对象没有被删除。奇怪的是,如果我多次重复上面的相同代码块,它就可以工作了:

for(var i= 0; i <Nomenclaturas.length; i++){
   if(Nomenclaturas[i].Codigo.length>6){
      Nomenclaturas.splice(i,1)
   }
}
console.log(Nomenclaturas.length)
//result = 8180
for(var i= 0; i <Nomenclaturas.length; i++){
   if(Nomenclaturas[i].Codigo.length>6){
      Nomenclaturas.splice(i,1)
   }
}
console.log(Nomenclaturas.length)
//result = 4646

for(var i= 0; i <Nomenclaturas.length; i++){
   if(Nomenclaturas[i].Codigo.length>6){
      Nomenclaturas.splice(i,1)
   }
}
console.log(Nomenclaturas.length)
//result = 2984


当我重复代码块7次时,它会做它应该做的事情。我在python中尝试了相同的脚本:

for i, nome in enumerate(nomeclaturas):
    if(len(nome['Codigo'])>6):
        del nomeclaturas[i]
print(len(nomeclaturas))
#result = 8180


我也有同样的问题,它不能在完成时工作,当我重复代码“for”代码块时它工作。
我的操作系统:
Windows 11家庭版64位(10.0,内部版本22621)
你可以在这里下载这个JSON:
https://portalunico.siscomex.gov.br/classif/#/nomenclatura/tabela?perfil=publico
选择“tabela vigente”和“JSON”

snz8szmq

snz8szmq1#

Python中对JSON文件的大小没有严格限制,但这取决于可用内存等因素。大文件可能会导致内存问题。考虑使用json.loads()等工具和流方法处理大文件,或使用ijson等外部库进行高效解析。

相关问题