def data_iterator(datas):
"""
遍历数据,删除不合格项,返回正常数据
:param datas:
:return:
"""
valid_data = {}
invalid_data = []
for data in datas:
# 进行详细地址判断
if "_id" in data:
data.pop("_id")
format_data_eval(data) #重点
format_data_add_key(data) #重点
i = format_data_position(data)
if i == 1:
invalid_data.append(data)
else:
if data["extend"]['date'] not in valid_data:
valid_data[data["extend"]['date']] = []
valid_data[data["extend"]['date']].append(data)
return valid_data, invalid_data
上述部分代码是在进行数据修复。
惨痛教训来了
因为知道python 没有值传递,都是引用传递,因为:
Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是对象。而变量是对象的一个引用(又称为名字或者标签),对象的操作都是通过引用来完成的。
所以我在代码中,直接通过引用遍历中的对象,直接进行操作对象,完成数据格式化
但是当代码运行数据到1000000 的时候,打开任务管理发现,内存在逐渐增加。发现内存泄露
这里首先说下,内存泄露和内存溢出的含义和区别:
def data_iterator(datas):
"""
遍历数据,删除不合格项,返回正常数据
:param datas:
:return:
"""
valid_data = {}
invalid_data = []
for data in datas:
# 进行详细地址判断
if "_id" in data:
data.pop("_id")
data = format_data_eval(data)
i = format_data_position(data)
if i == 1:
invalid_data.append(data)
else:
if data["extend"]['date'] not in valid_data:
valid_data[data["extend"]['date']] = []
valid_data[data["extend"]['date']].append(data)
return valid_data, invalid_data