免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2390 | 回复: 6
打印 上一主题 下一主题

拿一种数据类型去读已知的另一种类型的数据,只要格式语法合适就OK。 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-15 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-23 11:58 |只看该作者 |倒序浏览
在请教你一个问题   因为现在程序的逻辑 想走个捷径,拿一种数据类型去读已知的另一种类型的数据,主要还是想做分类处理 。该怎么写

代码如下
TCMDataType = numpy.dtype([('HeaderFlag', '<i4'),
                           ('Version', '<i2'),
                           ('id', <'i2'),
                           ('DataPackageSize', '<i4')]
程序先是按条件用户  id 合并了二进制文件, 并录入 到文本里

但是 有的用户 它有两种版本类型的数据, 我想先按照版本 分开。 然后 在重新组装数据。
rawData=numpy.append(rawData, numpy.fromfile(file_name, dtype=TCMDataType));

fresh = rawData[rawData['DataPackageSize'] == 844]        #844版本数据集
freshNew = rawData[rawData['DataPackageSize'] == 850]   #850版本数据集


现在想拿TCMNewDataType 读freshNew 该怎么写
TCMNewDataType = numpy.dtype([('HeaderFlag', '<i4'),
                           ('Version', '<i2'),
                           ('id', <'i2'),
                           ('Item', 'i<2'),
                           ('DataPackageSize', '<i4')]

求指导




   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
2 [报告]
发表于 2015-07-23 14:05 |只看该作者

没有深入学习过Python,我是这样理解
拿一种数据类型去读已知的另一种类型的数据,主要还是 Dtype 格式不匹配
4 ITEMS:
  1. [('HeaderFlag', '<i4'), ('Version', '<i2'), ('id', <'i2'), ('DataPackageSize', '<i4')]
复制代码
5 ITEMS: 不可能! 匹配
  1. [('HeaderFlag', '<i4'), ('Version', '<i2'), ('id', <'i2'), ('Item', 'i<2'), ('DataPackageSize', '<i4')]
复制代码
如果我有理解你的问题?
  1. #!/usr/bin/python2
  2. # coding: utf-8

  3. import numpy as NP

  4. TYPE = NP.dtype([('name1', '|S6'), ('DataPackageSize', '<f8')])
  5. LIST = [('n1234', 1.2), ('n2246', 3.4), ]
  6. ARRY = NP.array(LIST, dtype=TYPE)

  7. print ARRY['DataPackageSize']
  8. ARRY.tofile("file_name")

  9. # 是方法 [不是捷径!!] [color=Red](READ ALL SELECT ONE[/color])
  10. def GET(FILE, TYPE, ITEM, SIZE):
  11.     A = NP.fromfile(FILE, dtype=TYPE)
  12.     for I, S in enumerate(A[ITEM]):
  13.         if S == SIZE: return A[I]

  14. # IF
  15. V3DOT4 = GET("file_name", TYPE, 'DataPackageSize', 3.4)
  16. print V3DOT4    # ('n2246', 3.4

  17. # OR  IF
  18. V1DOT2 = GET("file_name", TYPE, 'DataPackageSize', 1.2)
  19. print V1DOT2    # ('n1234', 1.2)

  20. # 捷径 => fromfile(...count=1) count => Number of items to read
  21. # freshNew [color=Red]AS FIRST ITEM[/color]
  22. # 1.2
  23. # LIST = [('n1234', 1.2), ('n2246', 3.4), ]

  24. def GET_DataPackageSize_NEW(FILE, TYPE):
  25.     # 只读 1 项, WHEN freshNew AS FIRST ITEM
  26.     A = NP.fromfile(FILE, dtype=TYPE, count=1)
  27.     return A[0]


  28. V1DOT2 = GET_DataPackageSize_NEW("file_name", TYPE)
  29. print V1DOT2    # ('n1234', 1.2)

复制代码

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-15 06:20:00
3 [报告]
发表于 2015-07-23 14:50 |只看该作者
你的大概意思是 先将一种类型的数据写入文件,然后在用另一种类型的格式去读。 是这意思吧。回复 2# substr函数


   

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-15 06:20:00
4 [报告]
发表于 2015-07-23 14:51 |只看该作者
我拿 freshNewData = numpy.array(TCMDataNewType, freshtmpData)    这段语句试了下过不去。 所以 我也准备试下你说的通过文件来转换回复 2# substr函数


   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
5 [报告]
发表于 2015-07-23 15:19 |只看该作者

让我们回到问题的开始

TYPE = numpy.dtype([('HeaderFlag', '<i4'),
                           ('Version', '<i2'),
                           ('id', <'i2'),
                           ('DataPackageSize', '<i4')]
FILE: 它有两种版本类型的数据

DataPackageSize: 1.2, 3.4


然后
你想要什么?

1: 分类处理

例如: [('n1234', 1.2), ('n2246', 3.4), ]

分类出 =>
('n1234', 1.2)
('n2246', 3.4)

2: 读一个项目 EX: DataPackageSize == 3.4
('n2246', 3.4)

3: 其他

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-15 06:20:00
6 [报告]
发表于 2015-07-23 16:10 |只看该作者
本帖最后由 yangchao1117 于 2015-07-23 16:16 编辑

是转换类型  附上代码

             for file_name in file_names:
                    rawData = numpy.append(
                        rawData, numpy.fromfile(file_name, dtype=TCMDataType))
                下边这步是将两个版本的数据 分开放
                freshData = rawData[rawData['DataPackageSize'] == 844]#844
                freshtmpData = rawData[rawData['DataPackageSize'] == 850]#850
               
                下边这步 是把850 按照对的数据格式 重新放到新的数据集
                freshNewData = numpy.array(freshtmpData, dtype=TCMDataNewType)


还是 你的那种写法。是刚才 写差了。这么写可以得,没有问题。我已经再用了。

可能 是我表述的太多了,没说明白。
回复 5# substr函数


   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
7 [报告]
发表于 2015-07-23 17:06 |只看该作者
回复 6# yangchao1117

                下边这步 是把850 按照对的数据格式 重新放到新的数据集
                freshNewData = numpy.array(freshtmpData, dtype=TCMDataNewType)

学习了。多谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP