忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1570 | 回复: 6

python如何循环获取其中的数据 [复制链接]

论坛徽章:
0
发表于 2017-09-07 17:55 |显示全部楼层
本帖最后由 zxx1988328 于 2017-09-07 17:57 编辑

背景:日志文件每行的数据 ,每个手机用户的不同时间的状态值,想获取每行当中的最新的status的值,条件是根据uodatetime时间段判断是最新的status,处理前的数据是如下是四行,而且每行的json串不固定,比如第一行是4个,第二行是2个,第三行是1个,处理后的数据也是四行,每行获取一个最新的status的值,求各位大牛,如何处理
  1. [{"status":2,"mobile":13912345678,"updatetime":"2016-08-29 09:34:07"},{"status":2,"mobile":13912345678,"updatetime":"2016-08-17 12:18:10"},{"status":5,"mobile":13912345678,"updatetime":"2016-08-17 12:14:09"},{"status":4,"mobile":13912345678,"updatetime":"2016-08-17 12:05:23"}]
  2. [{"status":2,"mobile":13312345678,"updatetime":"2016-05-15 22:07:33"}]
  3. [{"status":1,"mobile":17712345678,"updatetime":"2016-02-29 09:34:07"},{"status":5,"mobile":17712345678,"updatetime":"2016-08-17 12:14:09"},{"status":5,"mobile":17712345678,"updatetime":"2016-08-17 12:05:23"}]
  4. [{"status":3,"mobile":15512345678,"updatetime":"2016-02-29 09:34:07"},{"status":1,"mobile":15512345678,"updatetime":"2016-08-17 12:05:23"}]
复制代码


处理后的数据格式
status 2
status 1
status 5
status 3




论坛徽章:
0
发表于 2017-09-07 23:42 |显示全部楼层
1. the json data is like dictionary of list
2. sort values fron dictionary
3. reverse it to make newest  updatetime to first

Sample:
json_data = [{"status":2,"mobile":13912345678,"updatetime":"2016-08-29 09:34:07"},{"status":2,"mobile":13912345678,"updatetime":"2016-08-17 12:18    :10"},{"status":5,"mobile":13912345678,"updatetime":"2016-08-17 12:14:09"},{"status":4,"mobile":13912345678,"updatetime":"2016-08-17 12:05:23"}]
newlist = sorted(json_data, key=lambda k: k['updatetime'])

print json_data
print newlist
revlist =  list(reversed(newlist))
print revlist

论坛徽章:
0
发表于 2017-09-07 23:44 |显示全部楼层
本帖最后由 ulmer 于 2017-09-11 19:41 编辑

Make your data [..][..].. as valid json data structure like: [ [..], .., [..] ]
Put(or read from a file) them into a variable, which you will get full valid json data.
You can access this json's variable to do what you want!

Sample:
test_data_file.json:
  1. [
  2. [{"status":2,"mobile":13912345678,"updatetime":"2016-08-29 09:34:07"},{"status":2,"mobile":13912345678,"updatetime":"2016-08-17 12:18:10"},{"status":5,"mobile":13912345678,"updatetime":"2016-08-17 12:14:09"},{"status":4,"mobile":13912345678,"updatetime":"2016-08-17 12:05:23"}],
  3. [{"status":2,"mobile":13312345678,"updatetime":"2016-05-15 22:07:33"}],
  4. [{"status":1,"mobile":17712345678,"updatetime":"2016-02-29 09:34:07"},{"status":5,"mobile":17712345678,"updatetime":"2016-08-17 12:14:09"},{"status":5,"mobile":17712345678,"updatetime":"2016-08-17 12:05:23"}],
  5. [{"status":3,"mobile":15512345678,"updatetime":"2016-02-29 09:34:07"},{"status":1,"mobile":15512345678,"updatetime":"2016-08-17 12:05:23"}]
  6. ]

复制代码


test.py:

  1. import json

  2. file_path = './test_data_file.json'
  3. data_records = [];
  4. with open (file_path) as json_data:
  5.     data_records = json.load(json_data)

  6. # call all updatetime's value in the first data record:
  7. print(data_records[0][0]['updatetime'])
复制代码


论坛徽章:
0
发表于 2017-09-07 23:44 |显示全部楼层
本帖最后由 ulmer 于 2017-09-07 23:51 编辑

Refreshed

论坛徽章:
0
发表于 2017-09-08 11:22 |显示全部楼层
回复 2# ulmer
大神英文这么好,代码也写的这么牛逼,厉害了,能再接着指点一下,如何获取每行的最新的status的值吗,允许直接可以获得最终的结果:
  1. status:1
  2. status:2
  3. status:5
  4. status:1
复制代码



论坛徽章:
0
发表于 2017-09-08 15:10 |显示全部楼层
import json
path ='你的这个文件存放路径‘
records = [json.loads(line) for line in open(path)]
status = [rec['status'] for rec in records if 'status' in rec]

论坛徽章:
0
发表于 2017-09-08 15:13 |显示全部楼层
import json
path = '文件名.txt'
reccords = [json.loads(line) for line in open(path)]
status_count = [rec['status'] for rec in records if 'status' in rec]


您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP